2016-11-05 304 views
0

我想通過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. 

回答

0

該錯誤消息表示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)) 
+0

S_ORDER_ITEM.LAST_UPD是TIMESTAMP(0)數據類型,我的輸入日期格式爲YYYYMMDD(不超過)。您可以修改答案 –

+0

我已將日期格式從YYYYMMDD格式轉換爲YYYY-MM-DD格式,然後應用您的解決方案。有效。 –