在Teradata中,尝试将时间戳(6)转换为时间戳(0)

时间:2016-10-05 16:33:05

标签: teradata

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

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

输入参数所需的日期后,我得到“无效的时间戳”#39;错误。

1 个答案:

答案 0 :(得分:1)

如果A真的是Timestamp(6),那么首先将它作为DATE投射会有效地修剪时间元素,所以当你将结果转换为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()看起来像时间戳吗?删除外部强制转换时会发生什么,结果中的任何日期看起来都不能很好地转换为时间戳?这里的东西不太正确,我怀疑它在你的数据中。

相关问题