Teradata BTEQ - 无效的时间戳问题

时间:2016-11-05 05:02:01

标签: teradata

我正在尝试通过TERADATA BTEQ执行sql并获得以下错误。

但是在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.

1 个答案:

答案 0 :(得分:0)

错误消息表明S_ORDER_ITEM.LAST_UPD不是日期/时间戳(char?),并且由于数据错误而导致时间戳的自动类型转换失败。

此部分'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

编辑:

如果您无法更改输入格式,则需要应用另一种格式:

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))