HIVE SQL教程
日期处理函数
1.date_format:将日期进行格式化
语法:date_format(日期,格式)
作用:把一个字符串日期格式化为指定的格式
年月日,时分秒:'yyyy-MM-dd HH:mm:ss'
select date_format('2017-01-01','yyyy-MM-dd HH:mm:ss'); --日期字符串必须满足yyyy-MM-dd格式
2.date_add、date_sub函数(加减日期)
作用:把一个字符串日期格式加一天、减一天。
select date_add('2019-01-01',1); --字符串必须满足yyyy-MM-dd格式
select date_sub('2019-01-01',1); --字符串必须满足yyyy-MM-dd格式
select to_char(date_sub(from_unixtime(unix_timestamp(now(),'YYYY-MM-DD HH:mm:ss'),'yyyy-MM-dd'),30),'yyyymmdd')
3.next_day函数
作用:得到一个字符串日期的下周几的具体日期
星期日 Sunday Sun.
星期一 Monday Mon.
星期二 Tuesday Tues.
星期三 Wednesday Wed.
星期四 Thursday Thur./Thurs.
星期五 Friday Fri.
星期六 Saturday Sat.
select next_day('2020-01-01','Fri'); --得到2020-01-01往后的第一个周五
4.last_day函数(求当月最后一天日期)
作用:求当月的最后一天日期
select last_day('2020-01-01');
结果:select last_day('2020-01-01');
5.获取当月第一天
TRUNC函数为指定元素而截去的日期值。
其具体的语法格式如下:
TRUNC(date[,fmt])
其中:date 一个日期值
fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去
select trunc(date('2021-08-04'),'MM')
6.获取当前时间
current_date
或者
now()
current_date()
作用:得到当前的日期字符串
select current_date();
结果:2020-01-01
时间戳处理函数
1.unix_timestemp
语法:('日期字符串',‘pattern’)
作用:把指定格式的日期转成时间戳,即转换成距离最早的时间之间的秒数
默认不填pattern的话,输入的日期字符串格式必须为:'yyyy-MM-dd HH:dd:ss',否则会返回空
例如:select unix_timestamp('2021-08-04 17:48:48')
如果不填任何参数就是当前系统时间戳
例如:select unix_timestamp()
结果为:
1628071166
日期格式必须和pattern指定格式一样,否则返回空
select unix_timestamp('2021-08-04 17:48:48','yyyy-MM-dd HH:mm:ss')
2.from_unixtime
语法:(‘bigint时间戳’,‘pattern’)函数
作用:把一个大数字时间戳,转换为指定格式的日期字符串
select from_unixtime(1517725479,'yyyy-MM-dd HH:dd:ss');
select from_unixtime(1517725479,'yyyyMMdd');
结果:2018-02-04 14:04:39
20180204
常把1和2一起用
select from_unixtime(unix_timestamp(now(),'yyyy-MM-dd HH:mm:ss'))
3.dateadd函数
减去指定周期时间,
hh:小时、mi:分钟、ss是秒
dd:日、MM:月
select dateadd(from_unixtime(unix_timestamp('2021-08-05 13:00:00','yyyy-MM-dd HH:mm:ss')),-60,'mi')
字符串处理函数
1.to_char
将日期类型的时间,转换成时间字符串,并按照指定格式输出
月是小mm:yyyymmdd
select to_char(dateadd(from_unixtime(unix_timestamp('2021-08-05 13:00:00','yyyy-MM-dd HH:mm:ss')),-60,'mi'),'yyyymmdd')
2.cast字符串转换为int
方法1:
cast(start_time AS BIGINT)
方法2:
select unix_timestamp()-int(unix_timestamp(event_time))