摘要:在本教程中,您将学习如何在 SQL 中从日期值或列中提取“天”。
使用 EXTRACT 函数从日期中提取“天” #
SQL 提供了 EXTRACT 函数,允许您从日期值中提取“天”。
这是 EXTRACT 函数的语法:
EXTRACT(DAY FROM date_value)Code language: SQL (Structured Query Language) (sql)在此语法中:
- 首先,在
FROM关键字之前使用DAY选项来从日期中提取“天”。 - 其次,在
FROM关键字之后指定要从中提取“天”的日期值 (date_value)。
如果 date_value 不是 DATE 类型的值,您可能需要先将其显式转换为 DATE 类型的值,然后再传递给 EXTRACT 函数。
下面显示了使用 EXTRACT 函数从表列中提取“天”的语法:
SELECT EXTRACT(DAY FROM date_column)
FROM table_name;Code language: SQL (Structured Query Language) (sql)在此语法中:
- 首先,在
FROM关键字之前指定DAY选项,以指示EXTRACT函数返回“天”。 - 其次,在
FROM关键字之后将date_column传递给EXTRACT函数。
以下语句使用 EXTRACT 函数从日期值中提取“天”:
SELECT EXTRACT(DAY FROM '2025-01-19'::DATE) the_day;Code language: SQL (Structured Query Language) (sql)输出
the_day
---------
19Code language: SQL (Structured Query Language) (sql)在此示例中,我们使用类型转换运算符 (::) 在 PostgreSQL 中将字符串转换为 DATE 类型的值。
以下示例使用 EXTRACT 函数从 employees 表的 hire_date 列中提取“天”:
SELECT
first_name,
hire_date,
EXTRACT(day FROM hire_date) joined_day
FROM
employees
ORDER BY
first_name;Code language: SQL (Structured Query Language) (sql)输出
first_name | hire_date | joined_day
-------------+------------+------------
Adam | 1997-04-10 | 10
Alexander | 1990-01-03 | 3
Alexander | 1995-05-18 | 18
Britney | 1997-03-03 | 3
Bruce | 1991-05-21 | 21
Charles | 2000-01-04 | 4Code language: SQL (Structured Query Language) (sql)使用 DAY 函数从日期中提取“天” #
包括 PostgreSQL、Oracle 和 Firebird 在内的许多数据库系统都广泛支持 EXTRACT 函数。
然而,像 MySQL、MariaDB、SQL Server、Db2、SAP HANA、Informix 和 Teradata 这样的数据库系统不支持 EXTRACT 函数。相反,它们提供了 DAY() 函数,允许您从日期值中提取“天”。
这是 DAY 函数的语法:
DAY(date_value)Code language: SQL (Structured Query Language) (sql)您也可以对 DAY 函数使用日期列:
SELECT
DAY(date_column)
FROM
table_name;Code language: SQL (Structured Query Language) (sql)例如,您可以在 MySQL 中使用 day 函数从日期中提取“天”,如下所示:
SELECT
first_name,
hire_date,
DAY (hire_date) joined_day
FROM
employees
ORDER BY
first_name;Code language: SQL (Structured Query Language) (sql)输出
first_name | hire_date | joined_day
-------------+------------+------------
Adam | 1997-04-10 | 10
Alexander | 1990-01-03 | 3
Alexander | 1995-05-18 | 18
Britney | 1997-03-03 | 3
Bruce | 1991-05-21 | 21
...Code language: SQL (Structured Query Language) (sql)在 SQLite 中从日期提取“天” #
SQLite 不支持 EXTRACT 和 DAY 函数。相反,它提供了 strftime() 函数,您可以使用 '%d' 格式字符串将日期格式化为“天”。
strftime('%d', date_column)Code language: SQL (Structured Query Language) (sql)例如,您可以使用 strftime 函数从日期中提取“天”,如下所示:
SELECT
strftime ('%d', '2025-01-19') the_day;Code language: SQL (Structured Query Language) (sql)输出
the_day
---------
19Code language: SQL (Structured Query Language) (sql)下表显示了各个数据库系统及其用于从日期中提取“天”的相应函数:
| 关系型数据库管理系统 (RDBMS) | 函数 | 示例 |
|---|---|---|
| PostgreSQL | EXTRACT(DAY FROM date) | SELECT EXTRACT(DAY FROM '2025-01-19'::DATE); |
| MySQL | DAY(date) | SELECT DAY('2025-01-19'); |
| MariaDB | DAY(date) | SELECT DAY('2025-01-19'); |
| Oracle | EXTRACT(DAY FROM date) | SELECT EXTRACT(DAY FROM DATE '2025-01-19') FROM DUAL; |
| SQL Server | DAY(date) | SELECT DAY('2025-01-19'); |
| SQLite | strftime('%d', date) | SELECT strftime('%d', '2025-01-19'); |
| DB2 | DAY(date) | SELECT DAY(DATE('2025-01-19')) FROM SYSIBM.SYSDUMMY1; |
| Firebird | EXTRACT(DAY FROM date) | SELECT EXTRACT(DAY FROM DATE '2025-01-19') FROM RDB$DATABASE; |
| SAP HANA | DAY(date) | SELECT DAY('2025-01-19') FROM DUMMY; |
| Teradata | EXTRACT(DAY FROM date) | SELECT EXTRACT(DAY FROM DATE '2025-01-19'); |
| Informix | DAY(date) | SELECT DAY('2025-01-19') FROM systables WHERE tabid = 1; |