Hive日期

发布于 2021-03-18  117 次阅读


时间戳转换

日期格式转换时间戳只能精确到秒(即长度只有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))