目录

实战篇MySQL-时间字段的处理

【实战篇】MySQL 时间字段的处理

MySQL 时间字段的处理

1、获取当前日期和时间

  • NOW() :返回当前的日期和时间。

    # 2025-03-14 11:07:24
    SELECT NOW();
  • CURDATE() :返回当前日期,不包含时间部分。

    # 2025-03-14
    SELECT CURDATE();
  • CURTIME() :返回当前时间,不包含日期部分。

    # 11:07:24
    SELECT CURTIME();
  • UNIX_TIMESTAMP() :返回当前时间的 Unix 时间戳。

    SELECT UNIX_TIMESTAMP();
  • FROM_UNIXTIME(unix_timestamp) :将 Unix 时间戳转换为日期时间。

    SELECT FROM_UNIXTIME(1678783404);

2、提取日期或时间的特定部分

  • YEAR(date) :返回日期的年份部分。

    SELECT YEAR('2025-03-14'); -- 2025
  • MONTH(date) :返回日期的月份部分。

    SELECT MONTH('2025-03-14'); -- 3
  • DAY(date) :返回日期的天部分。

    SELECT DAY('2025-03-14'); -- 14
  • HOUR(time) :返回时间的小时部分。

    SELECT HOUR('11:03:24'); -- 11
  • MINUTE(time) :返回时间的分钟部分。

    SELECT MINUTE('11:03:24'); -- 3
  • SECOND(time) :返回时间的秒部分。

    SELECT SECOND('11:03:24'); -- 24

实战示例

-- 近三年条件过滤
and check_year BETWEEN YEAR (CURDATE()) - 2 AND YEAR (CURDATE())

3、时间差计算

  • TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2) :返回两个日期时间表达式之间的差值,单位由第一个参数指定。
  • DateDiff() :计算 第一个时间 和 第二个时间 的时间差,a - b
  • TIMEDIFF(time_expr1, time_expr2) :返回两个时间表达式之间的差值。
SELECT TIMESTAMPDIFF(DAY, '2025-03-01', '2025-03-14'); # 13

SELECT DATEDIFF('2025-03-01', '2025-03-14'); # -13

SELECT TIMEDIFF('11:03:24', '10:00:00'); # '01:03:24'

4、格式化日期字段

# DATE_FORMAT(date, format):将日期格式化为指定的字符串
SELECT DATE_FORMAT('2025-03-01 11:03:24', '%Y-%m-%d'); -- '2025-03-01'

# STR_TO_DATE(str, format):将字符串按指定格式转换为日期
SELECT STR_TO_DATE('14-03-2025', '%d-%m-%Y'); -- 2025-03-14

5、时间提取

  • DATE() :提取日期时间表达式的日期部分。
SELECT DATE('2025-03-14 11:03:24'); -- '2025-03-14'
  • TIME() :提取日期时间表达式的时间部分。
SELECT TIME('2025-03-14 11:03:24'); -- '11:03:24'

6、日期的加减

(一)增加时间

# 日期 小于 当前日期加上 30 
( my_date < CURDATE() + INTERVAL 30 DAY )

# 日期加上 30 
ADDDATE(my_date, INTERVAL 30 DAY)

# 时间(time) 加上 2 小时
ADDTIME(my_time, '02:00:00')

函数解析:

  • ADDDATE(date, interval) 函数用于将指定的时间间隔(interval)添加到给定的日期(date)上。
  • ADDTIME(time, interval) 函数用于将指定的时间间隔(interval)添加到给定的时间(time)上。

(二)减少时间

# 一个日期减 30 天后,在'2024-01-27'  '2024-02-27' 的范围内的数据
( my_date - INTERVAL 30 DAY ) BETWEEN '2024-01-27' AND '2024-02-27'

# 一个日期中减去 30 
ADDDATE(my_date, INTERVAL -30 DAY)

# 一个时间中减去 2 小时
ADDTIME(my_time, '-02:00:00')

# 当天减一天(即昨天)
DATE_SUB( CURDATE(), INTERVAL 1 DAY )

# 例如今天是 2024-7-12,则下面拼接后的时间为 2024-7-11 23:59:59
CONCAT( DATE_SUB( CURDATE(), INTERVAL 1 DAY ), ' 23:59:59' )

函数解析:

  • DATE_SUB(date, interval) 函数用于将指定的日期(date)上减去时间间隔(interval)。