Hive日期转换
2021-01-13 # SQL
1. current_date:获取当前日期

select current_date()
输出:2021-01-13

2. current_timestamp:获取当前时间,精确到秒

select current_timestamp()
输出:2021-01-13 14:22:04.018+08:00

3. to_date:日期转换为日期函数

select to_date(‘2021-01-11 13:34:12’)
输出:2021-01-11

4. from_unixtime:转化unix时间戳到当前时区的时间格式,时间戳是秒的格式,毫秒的话需要/1000

select from_unixtime(1610294400, ‘yyyyMMdd’)
输出:20210111

select from_unixtime(1610298072000 / 1000, ‘yyyy-MM-dd’)
输出:2020-01-11

5. unix_timestamp:获取当前unix时间戳

select unix_timestamp()
输出:1610444126

select unix_timestamp(‘2021-01-10 13:51:20’)
输出:1610257880

select unix_timestamp(‘2021-01-10’, ‘yyyy-mm-dd’)
输出:1610208060

6. 获取当前年/月/日/小时/分钟/秒

select year(‘2021-01-10’)
select month(‘2021-01-10’)
select day(‘2021-01-10’)
select hour(‘2021-01-10 12:14:56’)
select minute(‘2021-01-10 12:14:56’)
select second(‘2021-01-10 12:14:56’)

7. 日期加减

datediff:返回开始日期减去结束日期的天数,格式只能是yyyy-mm-dd

select datediff(‘2021-01-10’, ‘2020-12-31’)
输出:10

date_sub:返回日期前n天的日期,格式只能是yyyy-mm-dd

select date_sub(‘2021-01-10’,5)
输出:2021-01-05

date_add:返回日期后n天的日期,格式只能是yyyy-mm-dd
select date_add(‘2021-01-10’,1)
输出:2021-01-11

8. yyyymmdd和yyyy-mm-dd互相转换

select from_unixtime(unix_timestamp(‘2021-01-11’, ‘yyyy-mm-dd’),’yyyymmdd’)
select from_unixtime(unix_timestamp(‘20210111’,’yyyymmdd’),’yyyy-mm-dd’)

9. 时间差

两个日期相差多少小时

select (unix_timestamp(‘2021-01-11 12:03:55’) - unix_timestamp(‘2021-01-11 11:03:55’)) / 3600
输出:1

两个日期相差多少分钟

select (unix_timestamp(‘2021-01-11 12:03:55’) - unix_timestamp(‘2021-01-11 11:03:55’)) / 60
输出:60

10. 返回上个月第一天和最后一天

这个月第一天

select trunc(CURRENT_TIMESTAMP,’mm’)

上个月第一天

select >trunc(add_months(CURRENT_TIMESTAMP,-1),’mm’)
select trunc(current_date, ‘mm’)

上个月最后一天

select date_sub(trunc(CURRENT_TIMESTAMP,’mm’),1);

11. 字符串转换为日期

select to_date(from_unixtime(unix_timestamp(‘11.11.2021’, ‘mm.dd.yyyy’)))