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