我在hive中的表格中有一份日期格式为'2016/06/01'。但我发现它的格式不是'2016-06-01'。 他们无法比较。 它们都是字符串。 所以我想知道如何让它们变得有害并可以比较它们。或者另一方面,如何将'2016/06/01'更改为'2016-06-01'以便他们可以比较。
非常感谢。
答案 0 :(得分:17)
要将日期字符串从一种格式转换为另一种格式,您必须使用hive的两个日期函数
unix_timestamp(string date, string pattern)
转换时间字符串
如果给定模式为unix时间戳(以秒为单位),则返回0
失败。from_unixtime(bigint unixtime[, string format])
转换了
从unix epoch(1970-01-01 00:00:00 UTC)到a的秒数
表示当前时刻的时间戳的字符串
系统时区。使用上述两项功能可以达到理想的效果。
最终查询是
select from_unixtime(unix_timestamp('2016/06/01','yyyy/MM/dd'),'yyyy-MM-dd') from table1;
其中table1是我的配置单元数据库中的表名。
我希望这能帮到你!!!
答案 1 :(得分:2)
使用:
unix_timestamp(DATE_COLUMN, string pattern)
上述命令有助于将日期转换为unix时间戳格式,您可以使用Simple Date Function格式化。
答案 2 :(得分:0)
假设您的表格中有一个“ birth_day”列,其格式是, 您应该使用以下查询将birth_day转换为所需格式。
date_Format(birth_day, 'yyyy-MM-dd')
您可以通过以下方式在查询中使用它
select * from yourtable
where
date_Format(birth_day, 'yyyy-MM-dd') = '2019-04-16';
答案 3 :(得分:0)
这是我的解决方案(用于字符串到实际日期类型):
using (var ts = new TransactionScope())
ps:to_date() 返回日期类型,this feature needs Hive 2.1+;在 2.1 之前,它返回 String。
ps2:hive to_date() 函数或 date_format() 函数,甚至 cast() 函数,不能 重新定义 'yyyy/MM/dd' 或 'yyyymmdd' 格式,我认为这很可悲,让我有点疯狂。