我正在使用HiveQL,我需要使用出生日期列来计算年龄,但问题在于 GetDate
行不通 Current_Date()
的。我正在尝试的例子是
datediff(yy,Dateofbirthcol,current_date()) As Age
.
DOB一栏看起来像 1988-12-14
.
试试下面的选项之一。
floor(datediff(to_date(from_unixtime(unix_timestamp())), Dateofbirthcol) / 365.25)
datediff(now(), Dateofbirthcol) / 365.25
不要使用unix_timestamp(),因为它是...。非决定性. 使用 current_date。
datediff(current_date, Dateofbirthcol) / 365.25
有多种方法可以实现,但在hive中没有现成的解决方案。
1) 使用dateiff().这个函数返回两天之间的天数,所以要用365.25除以函数的输出。
这个函数返回两天之间的天数,所以要用365.25除以函数的输出才能得到输出。(除以365.25考虑闰年)
select cast(datediff(current_date, DOB) / 365.25 as int) as age;
2) 使用 months_between() 。
这个函数返回两日之间的月差,所以要用12除以输出,得到预期的输出。
select cast(months_between(current_date, DOB) / 12 as int) as age;
3) 使用UDF 。
如果你正在寻找年、月、日格式的年龄,那么使用hive函数是一种复杂的方法。写一个自定义的udf函数会很有帮助,它将dob作为输入,并返回年龄的格式。 YY
岁月 MM
月 dd
天的格式。
参考日期功能,请参考 蜂巢文档 .