【实战篇】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 - bTIMEDIFF(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)。