Mysql 日期函数详解(now、date_add、datediff )

文章目录

  • 1 概述
  • 2 示例
    • 2.1 获取日期时间各部分
    • 2.2 日期时间相加减
  • 3 扩展
    • 3.1 now() 和 sysdate() 区别
    • 3.2 格式转换
    • 3.3 世界协调时间 UTC

1 概述

日期时间函数
格式规范
年-月-日,%Y-%m-%d ..
时:分:秒,%H:%i:%S..
特别说明
一周中的第一天是 '周天'(而非 '周一')
select now(),     -- 日期函数 + 时间函数
       sysdate(), -- 日期函数 + 时间函数
       curdate(), -- 日期函数
       curtime(); -- 时间函数

2 示例

2.1 获取日期时间各部分

-- 标准日期参数如下:year、month、day ...
select now(),
       date(now()) 日期,
       time(now()) 时间,

       quarter(now()) 季度,
       week(now()),

       year(now()),
       month(now()),
       day(now()),

       hour(now()),
       minute(now()),
       second(now()),
       microsecond(now()) 微妙,

       dayofyear(now()) 一年中的第几天,
       dayofmonth(now()) 一个月中的第几天,
       dayofweek(now()) 一周中的第几天, -- 周天起算
       -- 函数很多,但类似,用的时候 敲代码,看提示 即可。
       last_day(now()) 一个月中的最后一天
;

2.2 日期时间相加减

1. '单个' 日期时间相加减
   (1) date_add(date, interval int 日期参数)'+'
   (2) date_sub(date, interval int 日期参数)'-' 

2. '两个' 日期时间相加减
   (1) datediff(expr1, expr2)   : 日期差,天数 = expr1 - expr2
   (2) timediff(expr1, expr2)   : 时间差,时分秒 = expr1 - expr2
   (3) timestampdiff(日期参数, 日期1, 日期2): 请注意 = 日期2 - 日期1

单个日期时间相加减:date_add() +、date_sub() -

select now(),
       date_add(now(), interval 1 year) 明年,
       date_add(now(), interval 1 day) 明天,
       date_add(now(), interval 1 hour) 一小时后,
       -- 复杂的,敲的时候,看代码提示即可
       date_add(now(), interval '01:15' hour_minute) 一小时十五分钟后,
       date_add(now(), interval '01:15:30' hour_second) 一小时十五分三十秒后,
       date_add(now(), interval '1 01:15:30' day_second) 一天一小时十五分三十秒后,
       
       date_sub(now(), interval 1 year) 前年 -- 格式同上
  from dual;

两个日期时间相加减:

select datediff('2021-01-02', '2021-01-01') date_diff,  -- 1
       timediff('10:20:30', '08:10:15') time_diff,       -- 02:10:15
       -- 支持标准日期参数
       timestampdiff(day, '2021-01-01', '2021-01-02') timestamp_diff,
       timestampdiff(minute, '2021-01-01 08:10:15', '2021-01-02 10:20:30')  timestamp_diff2
  from dual;

3 扩展

3.1 now() 和 sysdate() 区别

相同点:都是 日期 + 时间 格式
不同点:(1) now()'执行开始时' 值就得到了
       (2) sysdate() 在函数执行时 '动态获取'

示例1:now() = ‘执行开始时’ 值就得到了

select now(), sleep(3), now();
-- 值一致
2021-01-18 17:07:22		0	2021-01-18 17:07:22

示例2:sysdate() = ‘执行函数时’ 才得到值

select sysdate(), sleep(3), sysdate();
-- 值不同
2021-01-18 17:08:40		0	2021-01-18 17:08:43

3.2 格式转换

  • Mysql 数据类型转换详解 (convert、cast)

3.3 世界协调时间 UTC

1. 世界协调时间 UTC:	Universal Time Coordinated

2. 我国位于 '东八时区',所以本地时间 = UTC 时间 + 8 小时
   (1) UTC 时间在业务涉及多个国家和地区的时候,非常有用

示例: now() = utc_timestamp() + 8h

select now(),                           -- 2021-06-16 10:39:51
       utc_date() 'utc_date',           -- 2021-06-16
       utc_time() 'utc_time',           -- 02:39:51
       utc_timestamp() 'utc_timestamp'  -- 2021-06-16 02:39:51
  from dual;

你可能感兴趣的:(MySQL,mysql,日期函数,时间函数)