SQL EXTRACT 函数

摘要:在本教程中,您将学习如何使用 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 函数。

SQL EXTRACT Function - Employees Table

从入职日期中提取年份 #

以下语句使用 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 函数从日期或时间戳值中提取日期或时间部分。

数据库 #

本教程是否有帮助?
© .