基础汇总
select date_add(day,1 - dayofweek(day)) -- 本周第一天 -> 周日的日期
select date_add(day,7 - dayofweek(day)) -- 本周最后一天 -> 周六的日期
select date_add(day,1 - case when dayofweek(day) = 1 then 7 else dayofweek(day) - 1 end) -- 本周第一天 -> 周一的日期
select date_add(day,7 - case when dayofweek(day) = 1 then 7 else dayofweek(day) - 1 end) -- 本周第一天 -> 周一的日期
select next_day(day,'TU') -- 当前日期的下个周二的日期
select trunc(day,'MM') -- 当月第一天的日期
select last_day(day) -- 当月最后一天的日期
select to_date(concat(year(day),'-',lpad(ceil(month(day)/3) * 3 -2,2,0),'-01')) -- 当季第一天的日期
select last_day(to_date(concat(year(day),'-',lpad(ceil(month(day)/3) * 3,2,0),'-01'))) -- 当季最后一天的日期
select trunc(day,'YY') -- 当年第一天的日期
select last_day(add_months(trunc(day,'YY'),12)) -- 当年最后一天的日期
select weekofyear(day) -- 当年第几周
select second(day),minute(day),hour(day), day(day), month(day), lpad(ceil(month(day)/3),2,0),year(day) -- 返回秒,分钟,小时,天,月份,季度,年
-- 上面的所有day都是 DateTime 类型或者 Date 类型
-- 例如 :'2021-01-19 10:00:00','2021-01-19'
时间以及日期处理,实例展示
获取当前时间截(timestamp)
使用unix_timestamp() 函数
select unix_timestamp()
展示结果为:
获取当前时间
使用current_timestamp()函数
select current_timestamp()
-- 精确到秒之后
展示结果为:
基于当前时间截图unix_timestamp()函数
SELECT from_unixtime(unix_timestamp())
-- 精确到秒
展示结果为:
获取当前日期
使用 CURRENT_DATE 函数
SELECT CURRENT_DATE
展示结果为:
日期之间的时间间隔
以天为单位
使用函数datediff(date_1,date_2),其返回结果为 date_1 - date_2,单位为天
select datediff(CURRENT_DATE,'2021-01-17')
展示结果为:
可返回为负值
select datediff('2021-01-17',CURRENT_DATE)
展示结果为:
以小时为单位
使用hour()函数与datediff结合使用
select (hour('2021-01-19 10:00:00')-hour('2021-01-18 12:00:00')+(datediff('2021-01-19 10:00:00','2021-01-18 12:00:00'))*24)
-- 首先分别提取结束时间点的小时以及开始时间的小时
-- 1.结束时间点的小时 - 开始时间点的小时
-- 再计算结束时间点与开始时间点差了几天
-- 2.相差天数*24等于相差的小时数
-- 1.+ 2. 等于以小时为单位的时间间隔
展示结果为:
日期之间进行加减
日期加法
使用 date_add(date,day_add)函数,返回值为 date + day_add 的日期
select date_add(CURRENT_DATE,365)
展示结果为:
日期减法
使用 date_sub(date,day_sub)函数,返回值为 date - day_sub 的日期
select date_sub(CURRENT_DATE,365)
展示结果为: