摘要:在本教程中,您将学习如何使用 SQL EXTRACT 函数来检索日期或时间值的特定部分。
SQL EXTRACT 函数简介 #
SQL EXTRACT 函数允许您从日期和时间值中提取日期或时间的特定部分。
这是 EXTRACT 函数的语法:
EXTRACT(part FROM date_value)Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)在此语法中:
part:您想要提取的日期部分。该部分可以是以下值之一:YEAR(年)、MONTH(月)、DAY(日)、HOUR(小时)、MINUTE(分钟)、SECOND(秒)、QUARTER(季度)、WEEK(周)、DAYOFYEAR(年中的第几天)、DAYOFWEEK(周中的第几天)等。date_value:您想要从中提取部分的日期或时间戳值。
您会发现 EXTRACT 函数对于从日期或时间戳值中提取日期和时间部分很有帮助。
SQL EXTRACT 函数示例 #
让我们使用 HR 示例数据库 中的 employees 表来演示 EXTRACT 函数。

从入职日期中提取年份 #
以下语句使用 EXTRACT 函数从员工的 hire_date 中提取年份。
SELECT
employee_id,
first_name,
last_name,
EXTRACT( YEAR FROM hire_date) AS hire_year
FROM
employees
ORDER BY hire_year;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)此查询返回员工 ID、名字、姓氏以及他们加入公司的年份。
employee_id | first_name | last_name | hire_year
-------------+-------------+-------------+-----------
200 | Jennifer | Whalen | 1987
100 | Steven | King | 1987
101 | Neena | Kochhar | 1989
103 | Alexander | Hunold | 1990
...Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)查找特定年份入职的员工 #
以下示例在 WHERE 子句中使用 EXTRACT 函数来查找所有在 1990 年入职的员工。
SELECT
employee_id,
first_name,
last_name,
hire_date
FROM
employees
WHERE
EXTRACT(YEAR FROM hire_date) = 1999;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)输出
employee_id | first_name | last_name | hire_date
-------------+------------+------------+------------
107 | Diana | Lorentz | 1999-02-07
113 | Luis | Popp | 1999-12-07
119 | Karen | Colmenares | 1999-08-10
178 | Kimberely | Grant | 1999-05-24Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)从入职日期中提取月份 #
以下语句使用 EXTRACT 函数从员工的 hire_date 中提取月份。
SELECT
employee_id,
first_name,
last_name,
EXTRACT(MONTH FROM hire_date) AS hire_month
FROM
employees
ORDER BY
first_name;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)该查询返回员工 ID、名字、姓氏以及员工加入公司的月份。
employee_id | first_name | last_name | hire_month
-------------+-------------+-------------+------------
121 | Adam | Fripp | 4
103 | Alexander | Hunold | 1
115 | Alexander | Khoo | 5
193 | Britney | Everett | 3
104 | Bruce | Ernst | 5
...Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)按入职月份对员工进行分组 #
以下示例将 EXTRACT 函数与 GROUP BY 子句结合使用,以按员工加入公司的月份来统计员工人数。
SELECT
EXTRACT(MONTH FROM hire_date) AS hire_month,
COUNT(*) AS employee_count
FROM
employees
GROUP BY
hire_month
ORDER BY
hire_month;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)该查询返回每个月入职的员工人数。
hire_month | employee_count
------------+----------------
1 | 4
2 | 4
3 | 3
4 | 2
5 | 4
6 | 6
7 | 2
8 | 4
9 | 5
10 | 2
11 | 1
12 | 3Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)从入职日期中提取日期 #
以下示例从 hire_date 列中提取日期。
SELECT
employee_id,
first_name,
last_name,
EXTRACT(DAY FROM hire_date) AS hire_day
FROM
employees;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)输出
employee_id | first_name | last_name | hire_day
-------------+-------------+-------------+----------
100 | Steven | King | 17
101 | Neena | Kochhar | 21
102 | Lex | De Haan | 13
103 | Alexander | Hunold | 3
104 | Bruce | Ernst | 21
...Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)从时间戳中提取所有部分 #
以下查询使用 EXTRACT 函数从时间戳中提取时间部分。
SELECT
EXTRACT(HOUR FROM TIMESTAMP '2025-01-21 10:20:30') h,
EXTRACT( MINUTE FROM TIMESTAMP '2025-01-21 10:20:30') m,
EXTRACT(SECOND FROM TIMESTAMP '2025-01-21 10:20:30') s;Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)输出
h | m | s
----+----+-----------
10 | 20 | 30.000000Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)请注意,TIMESTAMP 指示数据库系统该字面值为一个 TIMESTAMP 值。
摘要 #
- 使用
EXTRACT函数从日期或时间戳值中提取日期或时间部分。
数据库 #
本教程是否有帮助?