2017-06-05 322 views
0

我試圖完成對語句的插入,但不斷收到「無效日期」錯誤。2665 - Teradata中的無效日期錯誤

我創建語句:

CREATE MULTISET TABLE Date_Table, 
    NO FALLBACK , 
    NO BEFORE JOURNAL, 
    NO AFTER JOURNAL, 
    CHECKSUM = DEFAULT, 
    DEFAULT MERGEBLOCKRATIO 
    (
     customer_field, 
     date_field DATE FORMAT 'YYYY-MM-DD', 
     other_fields 
    ) 
PRIMARY INDEX (date_field); 

我的插入語句:

INSERT INTO Date_Table 
select 
    a.customer_field, 
    a.CAST (date_field AS DATE FORMAT 'yyyy-mm-dd'), 
    a.other_fields 
from a 

我試過到目前爲止:

  • 使得date_fiel通過cast(null as date) as date_field
  • 檢查在date_fieldsys_calendar.calendar每個日期d空,以確保它們是有效的日期
  • SELECT TYPE (date_field) FROM date_table GROUP BY 1檢查類型,它們都變成是「日」型

任何想法?

+0

左加入<表格一>到sys_calendar,使用 = CALENDAR_DATE其中爲空。這會告訴你,如果你有一些不是有效日期的值。 – Andrew

+0

如果消除INSERT並簡單地運行SELECT,會發生什麼情況?源表中列的數據類型是什麼? –

+0

@Andrew,這就是我在第二個子彈中所嘗試的。沒有任何返回 –

回答

0

當您創建Date_Table時,您指定的數據類型是日期。可能是table a的數據類型是VARCHAR,這與Date_Table不匹配。這就是您無法運行INSERT聲明的原因。我們可以去CAST

INSERT INTO Date_Table 
select 
    a.customer_field, 
    a.CAST (cast(date_field as varchar(8)) AS DATE FORMAT 'yyyy-mm-dd'), 
    a.other_fields 
from a 
+0

'varchar(8)'會截斷日期,在這種情況下 – voidpro