【问题标题】:Hive - Why does cast(col as timestamp) remove the millisecond digits if they are zero?Hive - 如果它们为零,为什么 cast(col as timestamp) 会删除毫秒数字?
【发布时间】:2018-12-28 04:42:57
【问题描述】:

我最近注意到 Hive 存在以下问题,但找不到相应的 HIVE 票证,因此想交叉检查一下。

我有一个字符串类型的列,它实际上是格式 yyyy-MM-dd HH:mm:ss.SSS 的时间戳。我将此列转换为时间戳类型,如下所示:

select my_str_col, cast(my_str_col as timestamp) as my_timestamp_col from my_table;

上述查询的结果如下所示:

您可以看到,在强制转换的版本中,如果最后一位数字为 0,则忽略最后一位数字。为什么会发生这种情况?

【问题讨论】:

  • 我观察到了同样的问题。

标签: sql string datetime hadoop hive


【解决方案1】:

这只是一个表示问题。

在时间戳中,就像在数字中一样,值0 的最后一个十进制数字是没有意义的;基本上:

1.230 = 1.23

另一方面,字符串,每个字符都很重要,以及字符串的长度:

'1.230' <> '1.23'

您的数据类型转换工作正常。字符串被转换为相关的时间戳值。只是这两种数据类型的表示使得它们看起来不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多