HIVE 的时间转换函数
HIVE 的時間轉(zhuǎn)換函數(shù)。
1,select unix_timestamp() 可以得到當前時間的時間戳。
select unix_timestamp(時間格式) 可以得到當前時間的時間戳。兩個時間戳進行相減,可以得到兩個時間相差的秒數(shù)。
SELECT from_unixtime(unix_timestamp()) 可以將時間戳轉(zhuǎn)換成相應的時間格式。
SELECT CURRENT_DATE;可以得到當前的時間。
注:(
時間戳(timestamp):
通常是一個字符序列,唯一地標識某一刻的時間。數(shù)字時間戳技術是數(shù)字簽名技術一種變種 的應用。
定義:
時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現(xiàn)在的總秒數(shù)。)
在大多數(shù)的sql中獲取當前時間都是用now()函數(shù)即可,hive獲取當前時間的函數(shù)與sql 不一樣
hive有一個獲得當前時區(qū)的UNIX時間戳:unix_timestamp
語法: unix_timestamp()
返回值: bigint
說明: 獲得當前時區(qū)的UNIX時間戳
SELECT from_unixtime(unix_timestamp());
--2018-02-27 14:51:01
獲取當前日期CURRENT_DATE。代碼如下:
SELECT CURRENT_DATE;
--2018-02-272.日期轉(zhuǎn)換函數(shù)
to_date,語法: to_date(string timestamp),返回值為string類型的日期
示例如下:
select to_date(‘2018-02-27 10:03:01’) ;
--2018-02-27last_day(string date),返回這個月的最后一天的日期。
select last_day(‘2018-02-27 10:03:01’);
--2018-02-28next_day,返回當前時間的下一個星期幾所對應的日期 。如下
select next_day(‘2018-02-27 10:03:01’, ‘TU’);
--2018-03-06說明,輸入日期為2-27,下個星期的周二為03-06,如果想要知道下周一的日期就是MO,周日就是SU,以此類推。
注意:
我跟無數(shù)多小白說過,西方國家周日是每周的第一天,所以日歷和英語中都是現(xiàn)實周日就是周一。
3 .對比日期函數(shù),經(jīng)常用于日期之間比較大小,或者計算差值,日期加減。
日期差值:datadiff(結(jié)束日期,開始日期),返回結(jié)束日期減去開始日期的天數(shù)。日期加減:date_add(時間,增加天數(shù)),返回值為時間天+增加天的日期;date_sub(時間,減少天數(shù)),返回日期減少天后的日期。注意如果想知道相差多少個小時又怎么去求那?我們其實稍加改造即可。
hour函數(shù)可以獲得時間字段的小時數(shù)和datediff來獲取兩個日期相差的天數(shù)。然后利用天數(shù)*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函數(shù),那么我們也會需要其他的時間提取,不多說直接看代碼,年月日時分秒:
補充:quarter,返回當前本年度第幾個季度。
DAYOFMONTH(date),它和data()函數(shù)都可以返回當前的天數(shù)日期。
返回月份日期的當天數(shù),在范圍為0?31。這下問題來了。獲取到了當期的日期怎么獲取到上個月的時間那。嘗試用下面的函數(shù)進行獲取;
SELECT SUBSTR(DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP()),30),1,7) AS mo通過DATE_SUB()函數(shù)對獲取的時間戳進行操作,對日期進行相減,突然發(fā)現(xiàn)要得到上個月的時間,我們的月份的時間都不確定,這里用30天,肯定不行。
有開始發(fā)現(xiàn)新的方法:
SELECT SUBSTR(DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP()),DAYOFMONTH(FROM_UNIXTIME(UNIX_TIMESTAMP()))),1,7) AS mo還是使用的DATE_SUB對日期進行操作,這次是將后面那個參數(shù)設置為獲取到當前的日期,相減就是上個月最后一天,也是代表上個月。
3 , date_format() 函數(shù)與dateformat()函數(shù),是不相同的。
dataformat()函數(shù),可以在不加額外參數(shù)的情況下,將"2019-06-07",轉(zhuǎn)換成,“20190607”
即dateformat(“2019-06-07”)
DATE_FORMAT() 函數(shù)用于以不同的格式顯示日期/時間數(shù)據(jù)。
DATE_FORMAT(date,format)
date 參數(shù)是合法的日期。format 規(guī)定日期/時間的輸出格式。
可以使用的格式有:
格式 描述
%a 縮寫星期名
%b 縮寫月名
%c 月,數(shù)值
%D 帶有英文前綴的月中的天
%d 月的天,數(shù)值(00-31)
%e 月的天,數(shù)值(0-31)
%f 微秒
%H 小時 (00-23)
%h 小時 (01-12)
%I 小時 (01-12)
%i 分鐘,數(shù)值(00-59)
%j 年的天 (001-366)
%k 小時 (0-23)
%l 小時 (1-12)
%M 月名
%m 月,數(shù)值(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 位
總結(jié)
以上是生活随笔為你收集整理的HIVE 的时间转换函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MAMP PRO教程
- 下一篇: 分享个好用的开源录屏工具 Captura