【详解】MySQL日期时间Extract函数介绍

举报
皮牙子抓饭 发表于 2025/10/25 20:54:26 2025/10/25
【摘要】 MySQL日期时间Extract函数介绍在处理数据库中的日期和时间数据时,经常会遇到需要从日期时间字段中提取特定部分的需求。MySQL 提供了 ​​EXTRACT​​ 函数来帮助开发者轻松地从日期或时间表达式中提取年份、月份、日、小时等信息。本文将详细介绍 ​​EXTRACT​​ 函数的使用方法及其应用场景。1. EXTRACT 函数基本语法​​EXTRACT​​ 函数的基本语法如下:EXT...

MySQL日期时间Extract函数介绍

在处理数据库中的日期和时间数据时,经常会遇到需要从日期时间字段中提取特定部分的需求。MySQL 提供了 ​​EXTRACT​​ 函数来帮助开发者轻松地从日期或时间表达式中提取年份、月份、日、小时等信息。本文将详细介绍 ​​EXTRACT​​ 函数的使用方法及其应用场景。

1. EXTRACT 函数基本语法

​EXTRACT​​ 函数的基本语法如下:

EXTRACT(unit FROM date)
  • unit:指定要提取的时间单位,可以是 YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 等。
  • date:一个日期或时间表达式,可以是日期时间类型(如 ​​DATE​​, ​​DATETIME​​, ​​TIMESTAMP​​)的列名、常量值或其他表达式。

2. 常见的时间单位

  • ​YEAR​​:年份
  • ​MONTH​​:月份
  • ​DAY​​:日
  • ​HOUR​​:小时
  • ​MINUTE​​:分钟
  • ​SECOND​​:秒
  • ​MICROSECOND​​:微秒
  • ​WEEK​​:周
  • ​QUARTER​​:季度
  • ​YEAR_MONTH​​:年和月
  • ​DAY_HOUR​​:日和小时
  • ​DAY_MINUTE​​:日和分钟
  • ​DAY_SECOND​​:日和秒
  • ​HOUR_MINUTE​​:小时和分钟
  • ​HOUR_SECOND​​:小时和秒
  • ​MINUTE_SECOND​​:分钟和秒

3. 示例

3.1 提取年份

假设有一个表 ​​events​​,其中有一列 ​​event_date​​ 存储事件发生的时间,类型为 ​​DATETIME​​。我们可以通过以下 SQL 语句提取所有事件发生的年份:

SELECT EXTRACT(YEAR FROM event_date) AS event_year
FROM events;

3.2 提取月份和日

如果需要同时提取月份和日,可以使用 ​​YEAR_MONTH​​ 或 ​​DAY_MONTH​​ 单位:

SELECT EXTRACT(MONTH FROM event_date) AS event_month,
       EXTRACT(DAY FROM event_date) AS event_day
FROM events;

或者:

SELECT EXTRACT(DAY_MONTH FROM event_date) AS event_day_month
FROM events;

3.3 提取小时和分钟

提取时间部分的信息也非常简单:

SELECT EXTRACT(HOUR FROM event_date) AS event_hour,
       EXTRACT(MINUTE FROM event_date) AS event_minute
FROM events;

3.4 提取周数

提取某日期所在的周数:

SELECT EXTRACT(WEEK FROM event_date) AS event_week
FROM events;

3.5 提取季度

提取某日期所在的季度:

SELECT EXTRACT(QUARTER FROM event_date) AS event_quarter
FROM events;

4. 注意事项

  • ​EXTRACT​​ 函数返回的是整数值,例如年份、月份、日等。
  • 如果提取的时间单位超出了日期范围,结果可能为 0 或负数。
  • 对于 ​​WEEK​​ 单位,MySQL 默认以周日为一周的开始,可以通过设置 ​​MODE​​ 参数来改变这一行为。



​EXTRACT​​​ 函数在 MySQL 中用于从日期或时间值中提取特定的部分(如年、月、日、小时等)。下面是一些实际应用场景中的示例代码,帮助你更好地理解和使用 ​​EXTRACT​​ 函数。

示例场景 1:从订单表中提取订单创建年的月份

假设我们有一个 ​​orders​​ 表,其中包含 ​​order_id​​ 和 ​​created_at​​ 字段。我们想要提取每笔订单创建的年份和月份。

-- 创建示例表
CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    created_at DATETIME NOT NULL
);

-- 插入示例数据
INSERT INTO orders (created_at) VALUES
('2023-01-15 10:00:00'),
('2023-02-20 14:30:00'),
('2022-12-05 08:45:00');

-- 提取订单创建的年份和月份
SELECT 
    order_id,
    EXTRACT(YEAR FROM created_at) AS order_year,
    EXTRACT(MONTH FROM created_at) AS order_month
FROM 
    orders;

示例场景 2:从员工表中提取入职日期的星期几

假设我们有一个 ​​employees​​ 表,其中包含 ​​employee_id​​ 和 ​​hire_date​​ 字段。我们想要提取每位员工入职日期的星期几。

-- 创建示例表
CREATE TABLE employees (
    employee_id INT AUTO_INCREMENT PRIMARY KEY,
    hire_date DATE NOT NULL
);

-- 插入示例数据
INSERT INTO employees (hire_date) VALUES
('2023-01-01'),
('2023-01-02'),
('2023-01-03');

-- 提取入职日期的星期几
SELECT 
    employee_id,
    hire_date,
    EXTRACT(DAYOFWEEK FROM hire_date) AS day_of_week
FROM 
    employees;

示例场景 3:从事件表中提取事件发生的时间部分

假设我们有一个 ​​events​​ 表,其中包含 ​​event_id​​ 和 ​​event_time​​ 字段。我们想要提取每个事件发生的具体时间(小时、分钟、秒)。

-- 创建示例表
CREATE TABLE events (
    event_id INT AUTO_INCREMENT PRIMARY KEY,
    event_time DATETIME NOT NULL
);

-- 插入示例数据
INSERT INTO events (event_time) VALUES
('2023-01-15 10:00:00'),
('2023-01-15 14:30:00'),
('2023-01-15 08:45:00');

-- 提取事件发生的时间部分
SELECT 
    event_id,
    event_time,
    EXTRACT(HOUR FROM event_time) AS event_hour,
    EXTRACT(MINUTE FROM event_time) AS event_minute,
    EXTRACT(SECOND FROM event_time) AS event_second
FROM 
    events;

示例场景 4:从日志表中提取日志记录的季度

假设我们有一个 ​​logs​​ 表,其中包含 ​​log_id​​ 和 ​​log_timestamp​​ 字段。我们想要提取每条日志记录的季度。

-- 创建示例表
CREATE TABLE logs (
    log_id INT AUTO_INCREMENT PRIMARY KEY,
    log_timestamp DATETIME NOT NULL
);

-- 插入示例数据
INSERT INTO logs (log_timestamp) VALUES
('2023-01-15 10:00:00'),
('2023-04-20 14:30:00'),
('2023-07-05 08:45:00'),
('2023-10-10 12:00:00');

-- 提取日志记录的季度
SELECT 
    log_id,
    log_timestamp,
    EXTRACT(QUARTER FROM log_timestamp) AS log_quarter
FROM 
    logs;


在MySQL中,​​EXTRACT​​ 函数用于从日期或日期时间值中提取特定的部分,如年、月、日、小时等。这个函数对于处理日期和时间数据非常有用,尤其是在需要对这些数据进行分析或操作时。

语法

EXTRACT(unit FROM datetime_expression)
  • unit:表示要提取的时间单位,可以是以下之一:
  • ​MICROSECOND​
  • ​SECOND​
  • ​MINUTE​
  • ​HOUR​
  • ​DAY​
  • ​WEEK​
  • ​MONTH​
  • ​QUARTER​
  • ​YEAR​
  • ​SECOND_MICROSECOND​
  • ​MINUTE_MICROSECOND​
  • ​MINUTE_SECOND​
  • ​HOUR_MICROSECOND​
  • ​HOUR_SECOND​
  • ​HOUR_MINUTE​
  • ​DAY_MICROSECOND​
  • ​DAY_SECOND​
  • ​DAY_MINUTE​
  • ​DAY_HOUR​
  • ​YEAR_MONTH​
  • datetime_expression:表示一个日期或日期时间值,可以是一个列名、常量或其他表达式。

示例

1. 提取年份

假设有一个表 ​​events​​,其中有一列 ​​event_date​​ 存储了事件的日期时间信息。

SELECT EXTRACT(YEAR FROM event_date) AS year
FROM events;

这条查询将返回 ​​event_date​​ 列中每个日期的年份。

2. 提取月份
SELECT EXTRACT(MONTH FROM event_date) AS month
FROM events;

这条查询将返回 ​​event_date​​ 列中每个日期的月份。

3. 提取天数
SELECT EXTRACT(DAY FROM event_date) AS day
FROM events;

这条查询将返回 ​​event_date​​ 列中每个日期的天数。

4. 提取小时
SELECT EXTRACT(HOUR FROM event_date) AS hour
FROM events;

这条查询将返回 ​​event_date​​ 列中每个日期的小时数。

5. 提取分钟
SELECT EXTRACT(MINUTE FROM event_date) AS minute
FROM events;

这条查询将返回 ​​event_date​​ 列中每个日期的分钟数。

6. 提取秒
SELECT EXTRACT(SECOND FROM event_date) AS second
FROM events;

这条查询将返回 ​​event_date​​ 列中每个日期的秒数。

7. 提取星期
SELECT EXTRACT(WEEK FROM event_date) AS week
FROM events;

这条查询将返回 ​​event_date​​ 列中每个日期的星期数(一年中的第几周)。

8. 提取季度
SELECT EXTRACT(QUARTER FROM event_date) AS quarter
FROM events;

这条查询将返回 ​​event_date​​ 列中每个日期的季度(一年中的第几个季度)。

9. 提取多个单位

你还可以提取多个单位的组合,例如:

SELECT EXTRACT(YEAR_MONTH FROM event_date) AS year_month
FROM events;

这条查询将返回 ​​event_date​​ 列中每个日期的年份和月份,格式为 ​​YYYYMM​​。

注意事项

  • ​EXTRACT​​ 函数返回的是整数值。
  • 如果 ​​datetime_expression​​ 是一个无效的日期或时间值,​​EXTRACT​​ 函数将返回 ​​NULL​​。
  • ​EXTRACT​​ 函数在处理时间戳时也非常有用,可以用来提取时间戳中的各个部分。

希望这些示例能帮助你更好地理解和使用 MySQL 的 ​​EXTRACT​​ 函数!如果你有任何其他问题或需要进一步的帮助,请随时告诉我。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。