日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HIVE 的时间转换函数

發(fā)布時(shí)間:2024/3/24 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HIVE 的时间转换函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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í)間戳

有時(shí)我們需要的不是時(shí)間戳而是具體的當(dāng)前時(shí)間:from_unixtime語法: from_unixtime(bigint unixtime, string format)可以將時(shí)間戳轉(zhuǎn)化為相應(yīng)的格式。

SELECT from_unixtime(unix_timestamp());

--2018-02-27 14:51:01


獲取當(dāng)前日期CURRENT_DATE。代碼如下:

SELECT CURRENT_DATE;

--2018-02-27

2.日期轉(zhuǎn)換函數(shù)

to_date,語法: to_date(string timestamp),返回值為string類型的日期
示例如下:

select to_date(‘2018-02-27 10:03:01’) ;

--2018-02-27

last_day(string date),返回這個(gè)月的最后一天的日期。

select last_day(‘2018-02-27 10:03:01’);

--2018-02-28

next_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í)分秒:

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

補(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。