Skip to content

SQL Date Functions API

用于在与当前行相关的多行间进行计算的 SQL 窗口函数。

1 class · 7 methods

窗口函数

7 methods

在由 OVER 子句定义的行“窗口”上操作的函数。

NOW()

为分区内的每一行分配一个唯一的连续整数。

Returns

datetime

Example

sql
SELECT NOW();
-- e.g. '2024-06-15 14:30:00'

INSERT INTO events (created_at) VALUES (NOW());
CURDATE()

分配带间隙的排名。并列项获得相同排名;下一个排名会跳过。

Returns

date

Example

sql
SELECT CURDATE();
-- e.g. '2024-06-15'

SELECT CURRENT_DATE;  -- standard SQL / PostgreSQL
DATE_ADD(date, INTERVAL expr unit)

分配不带间隙的排名。并列项获得相同排名;下一个排名是连续的。

Parameters

NameTypeDescription
datedateStart date.
exprintInterval amount.
unitkeywordUnit (DAY, MONTH, YEAR, ...).

Returns

datetime

Example

sql
-- MySQL
SELECT DATE_ADD('2024-06-15', INTERVAL 7 DAY);
-- '2024-06-22'
SELECT DATE_ADD('2024-06-15', INTERVAL 1 MONTH);
-- '2024-07-15'
DATE_SUB(date, INTERVAL expr unit)

返回当前行之前 offset 行的 expr 值。

Parameters

NameTypeDescription
exprdate列或表达式。
offsetint向前查看的行数(默认为 1)。
defaultkeyword超出分区时的值(默认为 NULL)。

Returns

datetime

Example

sql
SELECT DATE_SUB('2024-06-15', INTERVAL 30 DAY);
-- '2024-05-16'

SELECT DATE_SUB('2024-06-15', INTERVAL 1 YEAR);
-- '2023-06-15'
DATEDIFF(date1, date2)

返回当前行之后 offset 行的 expr 值。

Parameters

NameTypeDescription
exprdate列或表达式。
offsetdate向后查看的行数(默认为 1)。

Returns

int

Example

sql
-- MySQL: DATEDIFF(date1, date2) = date1 - date2
SELECT DATEDIFF('2024-06-15', '2024-06-01');  -- 14

-- SQL Server: DATEDIFF(day, date2, date1)
SELECT DATEDIFF(day, '2024-06-01', '2024-06-15');  -- 14
DATE_FORMAT(date, format)

将行分配到 n 个大致相等的组中,返回组号(1..n)。

Parameters

NameTypeDescription
datedate桶的数量。
formatstringFormat string (%Y, %m, %d, ...).

Returns

string

Example

sql
-- MySQL
SELECT DATE_FORMAT('2024-06-15', '%Y/%m/%d');
-- '2024/06/15'

-- PostgreSQL:
SELECT TO_CHAR(DATE '2024-06-15', 'YYYY/MM/DD');
EXTRACT(unit FROM date)

累计或分区求和。不带 ORDER BY 时,每行返回分区总和。

Parameters

NameTypeDescription
exprkeyword列或表达式。
datedateSource date.

Returns

int

Example

sql
SELECT EXTRACT(YEAR FROM '2024-06-15');   -- 2024
SELECT EXTRACT(MONTH FROM '2024-06-15');  -- 6
SELECT EXTRACT(DAY FROM '2024-06-15');    -- 15