hive-cast(col as timestamp)为什么要删除毫秒数字(如果它们是零)?

cczfrluj  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(685)

我最近注意到以下问题与Hive,但找不到相应的Hive票,所以想交叉检查这一点。
我有一个字符串类型的列,它实际上是格式为yyyy-mm-dd hh:mm:ss.sss的时间戳。我将此列转换为时间戳类型,如下所示:

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

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

您可以看到,在casted版本中,如果最后一个数字中的任何一个为0,则忽略最后一个数字。为什么会这样?

oiopk7p5

oiopk7p51#

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

  1. 1.230 = 1.23

另一方面,就字符串而言,每个字符都很重要,字符串的长度也很重要:

  1. '1.230' <> '1.23'

您的数据类型转换工作正常。字符串将转换为相关的时间戳值。正是这两种数据类型的表示让人觉得它们是不同的。

相关问题