2017-06-05 14 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
  • によるDのnullは、彼らがSELECT TYPE (date_field) FROM date_table GROUP BY 1によって種類を確認する有効な日付
  • していることを確認するsys_calendar.calendarに対してdate_fieldに各日付をチェックし、それらはすべて任意

「日付」タイプであることが判明思考?

+0

は<あなたのテーブルaは>あなた = calendar_dateを使用して、sys_calendarする参加残しました。 はnullです。有効な日付ではない値がある場合は、それが表示されます。 – Andrew

+0

INSERTを削除して単にSELECTを実行するとどうなりますか?ソーステーブルの列のデータ型は? –

+0

@Andrew、それは私の2番目の弾丸で試したことです。何も返さない –

答えて

0

Date_Tableを作成したときに指定したデータ型はdateです。 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