【实战篇】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)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值