A
的格式为timestamp(6)
。我需要timestamp(0)
。我正在使用的代码如下:
cast(cast(A AS date) as timestamp(0))
FROM 'table'
where A >= '?StartDT'
输入参数所需的日期后,我得到“无效的时间戳”#39;错误。
答案 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
错误。您确定字段A
是TIMESTAMP(6)
而不是VARCHAR()
看起来像时间戳吗?删除外部强制转换时会发生什么,结果中的任何日期看起来都不能很好地转换为时间戳?这里的东西不太正确,我怀疑它在你的数据中。