Teradata BTEQ - 无效的时间戳问题
问题描述:
我想通过TERADATA BTEQ执行sql并获取下面的错误。Teradata BTEQ - 无效的时间戳问题
但是,在Teradata SQL助手中执行相同的SQL运行良好。
WHERE S_ORDER_ITEM.LAST_UPD BETWEEN CAST((('20050614' (DATE, FORMAT 'YYYY-MM-DD')) -1 (CHAR(10)))|| ' ' || '22:00:01' AS TIMESTAMP(0)) AND CAST((('20050614' (DATE, FORMAT 'YYYY-MM-DD')) (CHAR(10)))|| ' ' || '22:00:00' AS TIMESTAMP(0))
*** Failure 2666 Invalid date supplied for S_ORDER_ITEM.LAST_UPD.
答
该错误消息表示S_ORDER_ITEM.LAST_UPD
不是日期/时间戳(炭?)和自动类型转换到一个时间戳失败由于恶劣的数据。
这部分'20050614' (DATE, FORMAT 'YYYY-MM-DD')
不应该工作,因为该字符串不符合格式。
没有必要将字符串转换为日期,因为使用标准SQL DATE '2005-06-14'
来推荐写入日期文字的方法更简单且更短。
如果日期实际上是知道你写的更好
BETWEEN TIMESTAMP '2005-06-13 22:00:01'
AND TIMESTAMP '2005-06-14 22:00:00'
否则不会转换为/从字符串,使用日期时间计算,而不是:
BETWEEN Cast(DATE '2005-06-14' AS TIMESTAMP(0)) - INTERVAL '01:59:59' HOUR TO SECOND
AND Cast(DATE '2005-06-14' AS TIMESTAMP(0)) + INTERVAL '22:00:00' HOUR TO SECOND
编辑:
如果您无法更改您需要应用另一个FORMAT的输入格式:
BETWEEN Cast((('20050614' (DATE, Format 'YYYYMMDD')) -1 (Format 'yyyy-mm-dd')) || ' ' || '22:00:01' AS TIMESTAMP(0))
AND Cast((('20050614' (DATE, Format 'YYYYMMDD')) (Format 'yyyy-mm-dd')) || ' ' || '22:00:00' AS TIMESTAMP(0))
S_ORDER_ITEM.LAST_UPD是TIMESTAMP(0)数据类型,我的输入日期格式为YYYYMMDD(不超过)。您可以修改答案 –
我已将日期格式从YYYYMMDD格式转换为YYYY-MM-DD格式,然后应用您的解决方案。有效。 –