2015-05-29 81 views
2

我是個新手。我有一個員工表,其中有一列指定加入日期,我想檢索最近3個月加入的員工列表。我知道我們可以使用from_unixtime(unix_timestamp())獲取當前日期。我如何計算datediff?是否有像MS SQL一樣內置的DATEDIFF()函數?請指教!如何計算Hive中的日期差異

回答

21
datediff(to_date(String timestamp), to_date(String timestamp)) 
0

yes datediff已實施;見: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

當我發現這個由谷歌,搜索 「蜂巢DATEDIFF」,它是第一個結果的方式;)

+0

感謝您的回覆。在「語言手冊」中,它指定datediff函數計算字符串類型之間的差異。它是否也適用於Timestamp類型? – Holmes

+0

我不知道,我從來沒有使用時間戳類型,我總是使用字符串作爲我的時間戳列。如果不起作用,只需將時間戳列轉換爲字符串(或將其保留爲字符串首位)。 – maxymoo

0

我想先試試這個

select * from employee where month(current_date)-3 = month(joining_date) 
+0

那些加入不到3個月前的人呢?那些在1月到3月加入的人呢? – aviad

+0

如果今天是可能的,他希望那些在四月,三月和二月加入的人,類似於六月,可能會,四月和三月 –

+0

嘗試使用current_date = 2015-01-01和joined_date = 2014-12- 01會有什麼結果? – aviad

0

如果您需要幾秒鐘的時間差異(即:將日期與時間戳進行比較,而不是整天),則可以簡單地將兩個日期或時間戳字符串轉換爲'YYYY-MM-DD HH:MM:SS'格式(或者指定顯式的字符串日期格式)使用unix_timestamp(),然後從中減去它們彼此以秒爲單位獲得差異。 (然後可以通過除以60.0拿到分鐘,或3600.0拿到小時等)

例子:

UNIX_TIMESTAMP('2017-12-05 10:01:30') - UNIX_TIMESTAMP('2017-12-05 10:00:00') AS time_diff -- This will return 90 (seconds). Unix_timestamp converts string dates into BIGINTs. 

更多關於你可以用UNIX_TIMESTAMP做什麼()在這裏,包括如何轉換具有不同日期格式的字符串:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions