在 Teradata 中,尝试将 Timestamp(6) 转换为 timestamp(0)

In Teradata, trying to convert Timestamp(6) to timestamp(0)

A格式为timestamp(6)。我需要它 timestamp(0)。我使用的代码如下:

cast(cast(A AS date) as timestamp(0))
FROM 'table'
where A >= '?StartDT'

输入我想要的参数日期后,出现 'Invalid timestamp' 错误。

如果 A 确实是 Timestamp(6) 那么首先将其转换为 DATE 会影响 trim 时间元素,因此当您将结果转换为TIMESTAMP(0) 您将以 00:00:00 的时间结束。

您还需要将 TIMESTAMP(6) 字段转换为时间,然后将结果相加,例如:

CAST(CAST(A AS DATE) AS TIMESTAMP(0)) + (CAST(A AS TIME(6)) - TIME '00:00:00' HOUR TO SECOND) 

您还可以使用 SUBSTRING() 剪掉 TIMESTAMP(6) 字段的最后 6 个字符,并将生成的字符串转换为 TIMESTAMP(0):

CAST(SUBSTRING(CAST(A AS CHAR(26)) FROM 1 FOR 19) AS TIMESTAMP(0))

这并没有解决您遇到的 INVALID TIMESTAMP 错误。您确定字段 ATIMESTAMP(6) 而不是看起来像时间戳的 VARCHAR() 吗?当您删除外部演员表时会发生什么,他们在结果中的任何日期看起来都不会很好地转换为时间戳?这里有些地方不太对劲,我怀疑它在您的数据中。