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