EXTRACT(YEAR FROM date)
提取年份。EXTRACT 函数是很多编程语言和数据库系统中常见的功能,主要用于从特定的数据类型中提取出所需的部分信息,下面以 SQL 语言中的 EXTRACT 函数为例进行详解。

SQL 中的 EXTRACT 函数
在 SQL 中,EXTRACT 函数用于从日期、时间或间隔类型的表达式中提取子字段,如年、月、日、小时等,其语法如下:
EXTRACT(field FROM source)
field
是要提取的字段,YEAR, MONTH, DAY, HOUR 等;
source
是一个日期、时间或间隔类型的值。
示例
假设有一个名为orders
的表,其中包含订单的创建时间(created_at
),如果我们想提取所有订单的创建年份,可以使用以下查询:
SELECT EXTRACT(YEAR FROM created_at) AS order_year FROM orders;
这个查询会返回一个名为order_year
的列,其中包含从created_at
字段中提取出的年份。
支持的字段列表

以下是一些常用的可以与 EXTRACT 函数一起使用的字段:
Field | 描述 |
YEAR | 4位数字表示的年份 |
MONTH | 月份,范围为01到12 |
DAY | 一个月中的第几天,范围为01到31 |
HOUR | 一天中的小时数,范围为00到23 |
MINUTE | 一小时内的分钟数,范围为00到59 |
SECOND | 一分钟内的秒数,范围为00到59 |
TIMEZONE | 时区偏移量,以分钟为单位 |
DOW | 一周中的第几天,星期日为0,星期一为1 |
DOY | 一年中的第几天,范围为001到366 |
单元表格示例
考虑一个具体例子,我们有以下订单数据:
Order ID | Created At |
1 | 20220815 10:25:00 |
2 | 20220905 15:30:00 |
3 | 20230101 00:00:00 |
使用 EXTRACT 函数提取不同信息:
SELECT EXTRACT(YEAR FROM created_at) AS order_year, EXTRACT(MONTH FROM created_at) AS order_month, EXTRACT(DAY FROM created_at) AS order_day, EXTRACT(HOUR FROM created_at) AS order_hour, EXTRACT(MINUTE FROM created_at) AS order_minute, EXTRACT(SECOND FROM created_at) AS order_second FROM orders;
结果:
Order ID | Order Year | Order Month | Order Day | Order Hour | Order Minute | Order Second |
1 | 2022 | 8 | 15 | 10 | 25 | 00 |
2 | 2022 | 9 | 5 | 15 | 30 | 00 |
3 | 2023 | 1 | 1 | 0 | 0 | 0 |
相关问题与解答
问题1:如果需要提取当前时间的特定字段,应如何使用EXTRACT函数?
答案:如果要提取当前时间的特定字段,可以直接将当前时间函数(如 NOW()、CURRENT_TIMESTAMP)作为EXTRACT的源,要获取当前的小时数,可以使用:

SELECT EXTRACT(HOUR FROM NOW());
问题2:EXTRACT函数能否用于非时间类型的字段?
答案:EXTRACT函数专门设计用来处理日期、时间和间隔类型的字段,对于非时间类型的字段,不能直接使用EXTRACT函数,如果需要从字符串或其他非时间类型数据中提取信息,可能需要结合其他SQL函数,如SUBSTRING、REGEXP_SUBSTR等。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复