HIVE的时间转换函数
HIVE 的时间转换函数。
1,select unix_timestamp() 可以得到当前时间的时间戳。
select unix_timestamp(时间格式) 可以得到当前时间的时间戳。两个时间戳进⾏相减,可以得到两个时间相差的秒数。SELECT from_unixtime(unix_timestamp()) 可以将时间戳转换成相应的时间格式。
SELECT CURRENT_DATE;可以得到当前的时间。
注:(
时间戳(timestamp):
通常是⼀个字符序列,唯⼀地标识某⼀刻的时间。数字时间戳技术是数字签名技术⼀种变种 的应⽤。
定义:
时间戳是指格林威治时间1970年01⽉01⽇00时00分00秒(北京时间1970年01⽉01⽇08时00分00秒)起⾄现在的总秒数。)
在⼤多数的sql中获取当前时间都是⽤now()函数即可,hive获取当前时间的函数与sql 不⼀样
hive有⼀个获得当前时区的UNIX时间戳:unix_timestamp
unix时间戳转换日期格式语法: unix_timestamp()
返回值: bigint
说明: 获得当前时区的UNIX时间戳
有时我们需要的不是时间戳⽽是具体的当前时间:from_unixtime
语法: from_unixtime(bigint unixtime, string format)
可以将时间戳转化为相应的格式。
SELECT from_unixtime(unix_timestamp());
--2018-02-27 14:51:01
获取当前⽇期CURRENT_DATE。代码如下:
SELECT CURRENT_DATE;
--2018-02-27
2.⽇期转换函数
to_date,语法: to_date(string timestamp),返回值为string类型的⽇期
⽰例如下:
select to_date(‘2018-02-27 10:03:01’) ;
--2018-02-27
last_day(string date),返回这个⽉的最后⼀天的⽇期。
select last_day(‘2018-02-27 10:03:01’);
--2018-02-28
next_day,返回当前时间的下⼀个星期⼏所对应的⽇期 。如下
select next_day(‘2018-02-27 10:03:01’, ‘TU’);
--2018-03-06
说明,输⼊⽇期为2-27,下个星期的周⼆为03-06,如果想要知道下周⼀的⽇期就是MO,周⽇就是SU,以此类推。
注意:
我跟⽆数多⼩⽩说过,西⽅国家周⽇是每周的第⼀天,所以⽇历和英语中都是现实周⽇就是周⼀。
3 .对⽐⽇期函数,经常⽤于⽇期之间⽐较⼤⼩,或者计算差值,⽇期加减。
⽇期差值:datadiff(结束⽇期,开始⽇期),返回结束⽇期减去开始⽇期的天数。
⽇期加减:date_add(时间,增加天数),返回值为时间天+增加天的⽇期;date_sub(时间,减少天数),返回⽇期减少天后的⽇期。
注意如果想知道相差多少个⼩时⼜怎么去求那?我们其实稍加改造即可。
  hour函数可以获得时间字段的⼩时数和datediff来获取两个⽇期相差的天数。然后利⽤天数*24+hour的差值即为所求,  ⽐如我们求2018-02-27 10:00:00 与 2018-02-25 12:00:00相差多少?
 实例代码如下:
select (hour(‘2018-02-27 10:00:00’)-hour(‘2018-02-25 12:00:00’)+(datediff(‘2018-02-27 10:00:00’,‘2018-02-25 12:00:00’))*24) as hour_subValue
--46
补充⼀个:返回当前时间下再增加num_months个⽉的⽇期 add_months(string start_date, int num_months)
上⾯介绍了hour函数,那么我们也会需要其他的时间提取,不多说直接看代码,年⽉⽇时分秒:
select year('2018-02-27 10:00:00'),month('2018-02-27 10:00:00'),day('2018-02-27 10:00:00'),hour('2018-02-27 10:00:00'),minute('2018-02-27 10:00:00'), second('2018-02-27 10:00:00'),weekofyear('2018-02-27 10:00:00');
--2018    2    27    10    0    0    9
补充:quarter,返回当前本年度第⼏个季度。
DAYOFMONTH(date),它和data()函数都可以返回当前的天数⽇期。
返回⽉份⽇期的当天数,在范围为0〜31。
这下问题来了。获取到了当期的⽇期怎么获取到上个⽉的时间那。尝试⽤下⾯的函数进⾏获取;
SELECT SUBSTR(DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP()),30),1,7) AS mo
通过DATE_SUB()函数对获取的时间戳进⾏操作,对⽇期进⾏相减,突然发现要得到上个⽉的时间,我们的⽉份的时间都不确定,这⾥⽤30天,肯定不⾏。
有开始发现新的⽅法:
SELECT SUBSTR(DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP()),DAYOFMONTH(FROM_UNIXTIME(UNIX_TIMESTAMP()))),1,7) AS mo
还是使⽤的DATE_SUB对⽇期进⾏操作,这次是将后⾯那个参数设置为获取到当前的⽇期,相减就是上个⽉最后⼀天,也是代表上个⽉。
3 , date_format() 函数与dateformat()函数,是不相同的。
dataformat()函数,可以在不加额外参数的情况下,将"2019-06-07",转换成,“20190607”
即dateformat(“2019-06-07”)
DATE_FORMAT() 函数⽤于以不同的格式显⽰⽇期/时间数据。
DATE_FORMAT(date,format)
date 参数是合法的⽇期。format 规定⽇期/时间的输出格式。
可以使⽤的格式有:
格式 描述
%a 缩写星期名
%b 缩写⽉名
%c ⽉,数值
%D 带有英⽂前缀的⽉中的天
%d ⽉的天,数值(00-31)
%e ⽉的天,数值(0-31)
%f 微秒
%H ⼩时 (00-23)
%h ⼩时 (01-12)
%I ⼩时 (01-12)
%i 分钟,数值(00-59)
%j 年的天 (001-366)
%k ⼩时 (0-23)
%l ⼩时 (1-12)
%M ⽉名
%m ⽉,数值(00-12)
%p AM 或 PM
%r 时间,12-⼩时(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)
%T 时间, 24-⼩时 (hh:mm:ss)
%U 周 (00-53) 星期⽇是⼀周的第⼀天
%u 周 (00-53) 星期⼀是⼀周的第⼀天
%V 周 (01-53) 星期⽇是⼀周的第⼀天,与 %X 使⽤
%v 周 (01-53) 星期⼀是⼀周的第⼀天,与 %x 使⽤
%W 星期名
%w 周的天 (0=星期⽇, 6=星期六)
%X 年,其中的星期⽇是周的第⼀天,4 位,与 %V 使⽤%x 年,其中的星期⼀是周的第⼀天,4 位,与 %v 使⽤%Y 年,4 位
%y 年,2 位

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。