Hive日期轉換

2021-10-25 09:27:46 字數 1244 閱讀 7147

先提兩句y和y的區別,

今天遇到乙個匪夷所思的問題,是在解決string型別的「20201027」轉換成「2020-10-27」的過程**現的,即:

select to_date(from_unixtime(unix_timestamp(

'20201027'

,'yyyymmdd'))

)-- 2020-10-27

select to_date(from_unixtime(unix_timestamp(

'20201027'

,'yyyymmdd'))

)-- 2020-01-27

結果是不一樣的,思考良久,最終在大谷同學的幫助下解決了這個問題,大谷同學當時說,「這個mm會不會被解釋成了分鐘呢」,深以為然,遂做如下驗證:

select from_unixtime(unix_timestamp(

'20201027'

,'yyyymmdd'))

-- 2020-01-27 00:10:00

select from_unixtime(unix_timestamp(

'20201027'

,'yyyymmdd'))

-- 2020-10-27 00:00:00

所以大谷同學的看法是正確的,的確是將mm解釋成了分鐘,而月份在mm預設的情況下,自動置為了一月份。

在這個過程中,讓我們意外的是,**並沒有報錯,就是說,hive對年月日時分秒的位置組合是沒有強限制的(或者這是通病?),於是我們嘗試:

select from_unixtime(unix_timestamp(

'20201027'

,'mmyyyydd'))

-- 2011-08-27 00:00:00

也就是說它只負責按位置讀取,比想象的要人工智障一些,他將「20201027」解釋成了2023年/20月/27, 轉換成12月份制,正好是上面的答案。於是,作為補充說明,我們做了以下嘗試:

select from_unixtime(unix_timestamp(

'20201326'

,'yyyymmdd'))

-- 2021-01-26 00:00:00

可以看到多出來的月份自動推到後面了,就很wonderful。

總之,以後再轉換的話,要嚴格記住形式,一定是大寫的m代表月份,小寫的m代表分鐘;

HIVE中日期轉換

本來是sql查出來是兩條資料 select groupid,shopid,shopname,deliverytime,sku,transport type from ods amz group fee where dt 2020 12 11 and sku fba syhg372 30cm mm表示...

Hive日期轉換用法

參考 1.日期函式unix時間戳轉日期函式 from unixtime語法 from unixtime bigint unixtime stringformat 返回值 string 說明 轉化unix時間戳 從1970 01 0100 00 00 utc到指定時間的秒數 到當前時區的時間格式 舉例...

Hive日期格式轉換用法

1.日期函式unix時間戳轉日期函式 from unixtime語法 from unixtime bigint unixtime stringformat 返回值 string 說明 轉化unix時間戳 從1970 01 0100 00 00 utc到指定時間的秒數 到當前時區的時間格式 舉例 hi...