首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【详解】MySQL日期时间Extract函数介绍

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

原创
作者头像
大盘鸡拌面
发布于 2025-10-25 20:55:03
发布于 2025-10-25 20:55:03
7390
举报

MySQL日期时间Extract函数介绍

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

1. EXTRACT 函数基本语法

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

代码语言:javascript
复制
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 语句提取所有事件发生的年份:

代码语言:javascript
复制
SELECT EXTRACT(YEAR FROM event_date) AS event_year
FROM events;
3.2 提取月份和日

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

代码语言:javascript
复制
SELECT EXTRACT(MONTH FROM event_date) AS event_month,
       EXTRACT(DAY FROM event_date) AS event_day
FROM events;

或者:

代码语言:javascript
复制
SELECT EXTRACT(DAY_MONTH FROM event_date) AS event_day_month
FROM events;
3.3 提取小时和分钟

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

代码语言:javascript
复制
SELECT EXTRACT(HOUR FROM event_date) AS event_hour,
       EXTRACT(MINUTE FROM event_date) AS event_minute
FROM events;
3.4 提取周数

提取某日期所在的周数:

代码语言:javascript
复制
SELECT EXTRACT(WEEK FROM event_date) AS event_week
FROM events;
3.5 提取季度

提取某日期所在的季度:

代码语言:javascript
复制
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​​ 字段。我们想要提取每笔订单创建的年份和月份。

代码语言:javascript
复制
-- 创建示例表
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​​ 字段。我们想要提取每位员工入职日期的星期几。

代码语言:javascript
复制
-- 创建示例表
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​​ 字段。我们想要提取每个事件发生的具体时间(小时、分钟、秒)。

代码语言:javascript
复制
-- 创建示例表
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​​ 字段。我们想要提取每条日志记录的季度。

代码语言:javascript
复制
-- 创建示例表
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​​ 函数用于从日期或日期时间值中提取特定的部分,如年、月、日、小时等。这个函数对于处理日期和时间数据非常有用,尤其是在需要对这些数据进行分析或操作时。

语法
代码语言:javascript
复制
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​​ 存储了事件的日期时间信息。

代码语言:javascript
复制
SELECT EXTRACT(YEAR FROM event_date) AS year
FROM events;

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

2. 提取月份
代码语言:javascript
复制
SELECT EXTRACT(MONTH FROM event_date) AS month
FROM events;

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

3. 提取天数
代码语言:javascript
复制
SELECT EXTRACT(DAY FROM event_date) AS day
FROM events;

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

4. 提取小时
代码语言:javascript
复制
SELECT EXTRACT(HOUR FROM event_date) AS hour
FROM events;

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

5. 提取分钟
代码语言:javascript
复制
SELECT EXTRACT(MINUTE FROM event_date) AS minute
FROM events;

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

6. 提取秒
代码语言:javascript
复制
SELECT EXTRACT(SECOND FROM event_date) AS second
FROM events;

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

7. 提取星期
代码语言:javascript
复制
SELECT EXTRACT(WEEK FROM event_date) AS week
FROM events;

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

8. 提取季度
代码语言:javascript
复制
SELECT EXTRACT(QUARTER FROM event_date) AS quarter
FROM events;

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

9. 提取多个单位

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

代码语言:javascript
复制
SELECT EXTRACT(YEAR_MONTH FROM event_date) AS year_month
FROM events;

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

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • MySQL日期时间Extract函数介绍
    • 1. EXTRACT 函数基本语法
    • 2. 常见的时间单位
    • 3. 示例
      • 3.1 提取年份
      • 3.2 提取月份和日
      • 3.3 提取小时和分钟
      • 3.4 提取周数
      • 3.5 提取季度
    • 4. 注意事项
      • 示例场景 1:从订单表中提取订单创建年的月份
      • 示例场景 2:从员工表中提取入职日期的星期几
      • 示例场景 3:从事件表中提取事件发生的时间部分
      • 示例场景 4:从日志表中提取日志记录的季度
      • 语法
      • 示例
      • 注意事项
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档