如何在 SQL 中从日期提取月份

摘要:在本教程中,您将学习如何在 SQL 中从日期值或列中提取月份。

使用 EXTRACT 函数从日期中提取月份 #

SQL 为您提供了 EXTRACT 函数,允许您从日期值中提取月份。

这是 EXTRACT 函数的语法:

EXTRACT(MONTH FROM date_value)Code language: SQL (Structured Query Language) (sql)

在此语法中:

  • 首先,在 FROM 关键字之前使用 MONTH 选项来从日期中提取月份。
  • 其次,在 FROM 关键字之后指定要从中提取月份的日期值 (date_value)。

如果 date_value 不是 DATE 类型的值,您可能需要先将其显式转换为 DATE 类型的值,然后再传递给 EXTRACT 函数。

要从表列中提取月份,您可以使用以下语法:

SELECT EXTRACT(MONTH FROM date_column)
FROM table_name;Code language: SQL (Structured Query Language) (sql)

在此语法中:

  • 首先,在 FROM 关键字之前指定 MONTH 选项,以指示 EXTRACT 函数返回月份。
  • 其次,在 FROM 关键字之后将 date_column 传递给 EXTRACT 函数。

以下语句使用 EXTRACT 函数从日期值中提取月份:

SELECT EXTRACT(MONTH FROM '2025-01-19'::DATE) the_month;Code language: SQL (Structured Query Language) (sql)

试一试

输出

 the_month
-----------
         1Code language: SQL (Structured Query Language) (sql)

在此示例中,我们使用类型转换运算符 (::) 在 PostgreSQL 中将字符串转换为 DATE 类型的值。

以下示例使用 EXTRACT 函数从 employees 表的 hire_date 列中提取月份:

SELECT
  first_name,
  hire_date,
  EXTRACT(MONTH FROM hire_date) joined_month
FROM
  employees
ORDER BY
  first_name;Code language: SQL (Structured Query Language) (sql)

试一试

输出

 first_name  | hire_date  | joined_month
-------------+------------+--------------
 Adam        | 1997-04-10 |            4
 Alexander   | 1990-01-03 |            1
 Alexander   | 1995-05-18 |            5
 Britney     | 1997-03-03 |            3
 Bruce       | 1991-05-21 |            5
...Code language: SQL (Structured Query Language) (sql)

使用 MONTH 函数从日期中提取月份 #

许多数据库系统,包括 PostgreSQL、Oracle 和 Firebird,都广泛支持 EXTRACT 函数。

然而,像 MySQL、MariaDB、SQL Server、Db2、SAP HANA、Informix 和 Teradata 这样的数据库系统不支持 EXTRACT 函数。它们提供了 MONTH 函数作为替代。

这是 MONTH 函数的语法:

MONTH(date_value)Code language: SQL (Structured Query Language) (sql)

您也可以对 MONTH 函数使用日期列:

SELECT
  MONTH(date_column)
FROM
  table_name;Code language: SQL (Structured Query Language) (sql)

例如,您可以在 MySQL 中使用 MONTH 函数从日期中提取月份,如下所示:

SELECT
  first_name,
  hire_date,
  MONTH (hire_date) joined_month
FROM
  employees
ORDER BY
  first_name;Code language: SQL (Structured Query Language) (sql)

试一试

输出

 first_name  | hire_date  | joined_month
-------------+------------+--------------
 Adam        | 1997-04-10 |            4
 Alexander   | 1990-01-03 |            1
 Alexander   | 1995-05-18 |            5
 Britney     | 1997-03-03 |            3
 Bruce       | 1991-05-21 |            5
 Charles     | 2000-01-04 |            1
...Code language: SQL (Structured Query Language) (sql)

在 SQLite 中从日期提取月份 #

SQLite 既不支持 EXTRACT 函数也不支持 MONTH 函数。它提供了 strftime() 函数,您可以使用 '%m' 格式字符串将日期格式化为月份:

strftime('%m', date_column)Code language: SQL (Structured Query Language) (sql)

例如,您可以使用 strftime 函数从日期中提取月份,如下所示:

SELECT
  strftime ('%m', '2025-01-19') the_month;Code language: SQL (Structured Query Language) (sql)

试一试

输出

 the_month
-----------
 01Code language: SQL (Structured Query Language) (sql)

下表显示了各种数据库及其用于从日期中提取月份的相应函数:

关系型数据库管理系统 (RDBMS)函数示例
PostgreSQLEXTRACT(MONTH FROM date)SELECT EXTRACT(MONTH FROM '2025-01-19'::DATE);
MySQLMONTH(date)SELECT MONTH('2025-01-19');
MariaDBMONTH(date)SELECT MONTH('2025-01-19');
OracleEXTRACT(MONTH FROM date)SELECT EXTRACT(MONTH FROM DATE '2025-01-19') FROM DUAL;
SQL ServerMONTH(date)SELECT MONTH('2025-01-19');
SQLitestrftime('%Y', date)SELECT strftime('%m', '2025-01-19');
DB2MONTH(date)SELECT MONTH(DATE('2025-01-19')) FROM SYSIBM.SYSDUMMY1;
FirebirdEXTRACT(MONTH FROM date)SELECT EXTRACT(MONTH FROM DATE '2025-01-19') FROM RDB$DATABASE;
SAP HANAMONTH(date)SELECT MONTH('2025-01-19') FROM DUMMY;
TeradataEXTRACT(MONTH FROM date)SELECT EXTRACT(MONTH FROM DATE '2025-01-19');
InformixMONTH(date)SELECT MONTH('2025-01-19') FROM systables WHERE tabid = 1;

本教程是否有帮助?
© .