Teradata BTEQ - 无效的时间戳问题
Teradata BTEQ - Invalid timestamp issue
我正在尝试通过 TERADATA BTEQ 执行 sql 并收到以下错误。
但同样的 sql 在 Teradata 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
不是 date/timestamp(字符?)并且由于数据错误导致自动类型转换为时间戳失败。
这部分 '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'
否则不要转换 to/from 字符串,而是使用日期时间计算:
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))
当您的 phone 时间错误时会出现 timestemp 错误
解决方案是更正您的设备时间
我正在尝试通过 TERADATA BTEQ 执行 sql 并收到以下错误。
但同样的 sql 在 Teradata 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
不是 date/timestamp(字符?)并且由于数据错误导致自动类型转换为时间戳失败。
这部分 '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'
否则不要转换 to/from 字符串,而是使用日期时间计算:
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))
当您的 phone 时间错误时会出现 timestemp 错误 解决方案是更正您的设备时间