如何更改配置单元中的日期格式?

时间:2016-06-01 03:00:39

标签: sql hadoop hive

我在hive中的表格中有一份日期格式为'2016/06/01'。但我发现它的格式不是'2016-06-01'。 他们无法比较。 它们都是字符串。  所以我想知道如何让它们变得有害并可以比较它们。或者另一方面,如何将'2016/06/01'更改为'2016-06-01'以便他们可以比较。

非常感谢。

4 个答案:

答案 0 :(得分:17)

要将日期字符串从一种格式转换为另一种格式,您必须使用hive的两个日期函数

  1. unix_timestamp(string date, string pattern)转换时间字符串 如果给定模式为unix时间戳(以秒为单位),则返回0 失败。
  2. from_unixtime(bigint unixtime[, string format])转换了 从unix epoch(1970-01-01 00:00:00 UTC)到a的秒数 表示当前时刻的时间戳的字符串 系统时区。
  3. 使用上述两项功能可以达到理想的效果。

    从下图中可以看到样本输入和输出: enter image description here

    最终查询是

    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格式化。

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' 格式,我认为这很可悲,让我有点疯狂。