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