时间戳转换
日期格式转换时间戳只能精确到秒(即长度只有10位,而不是13位)
--不传参则直接获取当前的时间戳
unix_timestamp()
unix_timestamp(date,dateformat)
unix_timestamp('2021-01-19 14:53:26','yyyy-MM-dd HH:mm:ss')
--时间戳转换成日期格式,必须长度为10
--如果是毫秒级别时间戳13位,可以这么转换cast(timestamp/1000 as bigint)
from_unixtime(timestamp,dateformat)
from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') from_unixtime(1537924406,'yyyy-MM-dd')
日期格式化
--把字符串或者日期转成指定格式的日期
--string 不能是yyyyMMdd格式
date_format(string/date,dateformate)
date_format('2018-09-12','yyyy-MM-dd HH:mm:ss')
--to_date(date)函数 date:时间戳13位
--返回 yyyy-MM-dd日期格式
--yyyyMMdd转yyyy-MM-dd
from_unixtime(unix_timestamp('20200823','yyyymmdd'),'yyyy-mm-dd')
日期计算
--date_add 后n天 n可为负数
--date_sub 前n天 n可为负数
date_add(date,n)
date_sub(date,n)
--后n月 n可为负数
add_months(date,m)
--两个日期相差,前面减后面
datediff(date,date1)
--两个日期分钟差
round((unix_timestamp(date_time1)-unix_timestamp(date_time2))/60,0)
下个星期X的日期
next_day(date,formate)
--format:英文星期几的缩写或者全拼
select next_day('2021-01-19','TH') as date_time;
date_time
2021-01-21
日期表达式
日期 | 表达式 |
---|---|
当前日期 | current_date() |
当前第几周 | weekofyear(current_date()) |
当前周几 | pmod(datediff(current_date(), '2017-01-01'), 7) |
下周一 | next_day(current_date(),'MO') |
本周一 | next_day(date_sub(current_date(),7),'MO') |
月初 | trunc(current_date(),'MM') |
月末 | last_day(current_date()) |
年初 | trunc(current_date(),'YY') |
去年年初 | add_months(trunc(current_date(), 'YY'), -12) |
季初 | add_months(trunc(date, 'YY'),cast(floor(month(date)/3.1)*3 as int)) |
Comments NOTHING