日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Hive常見時間日期函數(shù)的使用與問題整理

作者:野生的大熊 更新時間: 2023-07-09 編程語言

1.時間戳和日期相互轉(zhuǎn)換函數(shù)

具體執(zhí)行結(jié)果在后面?zhèn)渥?biāo)注出來。主要為時間戳轉(zhuǎn)換為日期函數(shù),和將日期轉(zhuǎn)換為時間戳函數(shù)

-- 1.時間戳轉(zhuǎn)化為日期函數(shù)
-- from_unixtime(bigint unixtime[, string format]) 其中第一個參數(shù)必須為bigint類型
select from_unixtime(1661084482)		-- 2022-08-21 20:21:22  
select from_unixtime(1661084482, 'yyyy-MM-dd')  -- 2022-08-21  
select from_unixtime(1661084482, 'yyyyMMdd') 	-- 20220821
select from_unixtime(1661084482,'yyyy-MM-dd HH:mm:ss')		-- 2022-08-21 20:21:22  

-- 2.將日期轉(zhuǎn)換為時間戳
select unix_timestamp('2022-08-21 20:21:22')		-- 1661084482  
select unix_timestamp('20220821','yyyyMMdd')	-- 1661011200
select unix_timestamp('2022-08-21', 'yyyy-MM-dd')	-- 1661011200

反回頂部

2.獲取當(dāng)前天的相關(guān)函數(shù)

獲取當(dāng)天時間的三種方式,注意格式,其中current_timestamp返回的時間為UTC時間。

-- 返回當(dāng)天三種方式,格式有一定的不同
select current_date 	-- 2023-06-14
select current_timestamp 	-- 返回時分秒 2023-06-14 07:56:14.28
select from_unixtime(unix_timestamp()) 		-- 2023-06-14 15:56:14

反回頂部

3.日期格式化函數(shù)

日期格式化函數(shù),需要什么格式,后面寫什么格式的日期字符串描述,to_date僅有一種格式返回結(jié)果

-- 需要什么格式,后面寫什么格式的日期字符串描述
select date_format('2022-08-21 20:21:22', 'yyyy-MM-dd')	-- 2022-08-21  
select date_format('2022-08-21 20:21:22', 'yyyyMMdd')		-- 20220821
select date_format('2022-08-21', 'yyyy-MM-dd HH:mm:ss') -- 2022-08-21 00:00:00

-- 獲取時間日期的日期部分
select to_date('2022-08-21 20:21:22')		-- 2022-08-21

反回頂部

4.獲取年、月、日、天、小時、分鐘、秒、周數(shù)、星期幾、季節(jié)函數(shù)

hive提供了靈活獲取年、月、日、天、小時、分鐘、秒、周數(shù)、星期幾、季節(jié)的函數(shù),最后面還提供了一個通過數(shù)學(xué)函數(shù)轉(zhuǎn)換獲取季度的邏輯,可以看出其實(shí)部分函數(shù)如果版本不支持,我們可以通過其他方式曲線獲取。當(dāng)然,不提倡,可讀性差。

-- 獲取年
select year('2022-08-21 20:21:22')		-- 2022
-- 獲取月
select month('2022-08-21 20:21:22')		-- 8
-- 獲取當(dāng)前天
select day('2022-08-21 20:21:22')			-- 21
-- 每月第幾天,同day()
select dayofmonth('2022-08-21 20:21:22')		-- 21
-- 獲取當(dāng)前小時
select hour('2022-08-21 20:21:22')			-- 20
-- 獲取當(dāng)前分鐘
select minute('2022-08-21 20:21:22')		-- 21
-- 獲取當(dāng)前秒
select second('2022-08-21 20:21:22') 		-- 22
-- 活躍當(dāng)前日期是本年第幾周
select weekofyear('2022-08-21 20:21:22')		-- 31
-- 獲取當(dāng)前天是本周第幾天,計算日歷是從星期天為本周第一天開始計算。如果想要計算星期1為第一天,可以在當(dāng)前天加1天再去計算。
select dayofweek('2022-08-21 20:21:22')		-- 1
-- 獲取當(dāng)前日期是第幾季度
select quarter('2022-08-21 20:21:22')		-- 3

-- 如果有hive因版本不支持部分函數(shù),可以通過數(shù)學(xué)轉(zhuǎn)換計算,例如當(dāng)前是第幾季度。
select ceil(month('2022-08-21 20:21:22')/3)	-- 季節(jié) 3 數(shù)學(xué)轉(zhuǎn)換

反回頂部

5.日期和月份的加減相關(guān)函數(shù)

獲取日期和月份的加減操作,靈活處理日期和月份增加減少,日期月份之間互相求差值。

-- 日期增加日
select date_add('2022-08-21',10) -- 增加日	2022-08-31
-- 日期減少日
select date_sub('2022-08-21',10) -- 減少日	 2022-08-11
-- 月增加
select add_months('2022-08-21',2) -- 增加月 	2022-10-21
-- 月減少
select add_months('2022-08-21',-1) -- 減少月	2022-07-21

-- 兩個日期相減函數(shù)
select datediff('2022-08-23', '2022-08-21')	-- 2
-- 兩個月份相減
select months_between('2022-08-21', '2022-07-25')	-- 0.871

反回頂部

6.獲取一些指定特殊日期的函數(shù)

主要是獲取指定日期的月初(月末)、年初(年末)日期和獲取指定日期的下個星期幾的日期

-- 獲取指定日期的月初(月末)、年初(年末)日期
select last_day('2023-06-13')  -- 月末	2023-06-30
select trunc('2023-06-13', 'MM')  -- 月初	2023-06-01
select trunc('2023-06-13', 'YY')  -- 年初	2023-01-01
select date_sub(add_months(trunc('2023-06-13', 'YY'),12),1) -- 年末	2023-12-31

-- 獲取指定日期的下個星期幾的日期
select next_day('2023-06-13', 'MO')    -- 2023-06-19
select next_day('2023-06-13', 'TU')    -- 2023-06-20
select next_day('2023-06-13', 'WE')    -- 2023-06-14
select next_day('2023-06-13', 'TH')    -- 2023-06-15
select next_day('2023-06-13', 'FR')    -- 2023-06-16
select next_day('2023-06-13', 'SA')    -- 2023-06-17
select next_day('2023-06-13', 'SU')    -- 2023-06-18

反回頂部

7.時區(qū)轉(zhuǎn)換函數(shù)操作

時區(qū)轉(zhuǎn)換函數(shù)有很多需要注意的點(diǎn),其也可以聯(lián)合使用,簡單說一下時區(qū),UTC是世界標(biāo)準(zhǔn)時間。

東一區(qū) GMT+1,東八區(qū)GMT+8以此類推,西一區(qū)GMT-1,西七區(qū)GMT-7以此類推。

時間戳沒有時區(qū)屬性,同一時刻時間戳一致。

-- 將utc時間轉(zhuǎn)換為東八區(qū)時間。輸入為utc時間字符串,結(jié)果為東八區(qū)時間字符串
select from_utc_timestamp('2023-06-14 15:56:14','GMT+8')		-- 2023-06-14 23:56:14

-- 將utc時間戳轉(zhuǎn)換為東八區(qū)時間,輸入為utc時間戳,結(jié)果為東八區(qū)時間字符串,時間戳沒有時區(qū)屬性,同一時刻時間戳一致
select from_utc_timestamp(cast(1686729374000 as bigint),'GMT+8')		-- 2023-06-14 15:56:14
-- 將指定時區(qū)時間轉(zhuǎn)換成utc時間
select to_utc_timestamp('2023-06-14 15:56:14','GMT+8')		-- 2023-06-14 07:56:14
-- 將指定時區(qū)時間的時間戳轉(zhuǎn)換成utc時間(這種使用方式不常見,是錯誤的,只是在某些時刻進(jìn)行數(shù)據(jù)轉(zhuǎn)換用,不建議使用)
select to_utc_timestamp(cast(1686729374000 as bigint),'GMT+8')	-- 2023-06-13 23:56:14
-- 正確的轉(zhuǎn)換時間戳為utc時間的方式
select to_utc_timestamp(cast(1686729374000 as bigint),'UTC')

以上內(nèi)容為日期時間函數(shù)的常見使用方法及注意事項,有需要可以收藏。

一些函數(shù)可以搭配使用,滿足生產(chǎn)環(huán)境中的時間需求。

原文鏈接:https://blog.csdn.net/2301_78834737/article/details/131558949

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新