窗口函数
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 / PostgreSQLDATE_ADD(date, INTERVAL expr unit)分配不带间隙的排名。并列项获得相同排名;下一个排名是连续的。
Parameters
| Name | Type | Description |
|---|---|---|
| date | date | Start date. |
| expr | int | Interval amount. |
| unit | keyword | Unit (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
| Name | Type | Description |
|---|---|---|
| expr | date | 列或表达式。 |
| offset | int | 向前查看的行数(默认为 1) 。 |
| default | keyword | 超出分区时的值(默认为 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
| Name | Type | Description |
|---|---|---|
| expr | date | 列或表达式。 |
| offset | date | 向后查看的行数(默认为 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'); -- 14DATE_FORMAT(date, format)将行分配到 n 个大致相等的组中,返回组号(1..n)。
Parameters
| Name | Type | Description |
|---|---|---|
| date | date | 桶的数量。 |
| format | string | Format 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
| Name | Type | Description |
|---|---|---|
| expr | keyword | 列或表达式。 |
| date | date | Source 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