2017-06-05 1 views
0

J'essaie de compléter une instruction insert into en obtenant une erreur "Invalid Date".2665 - Erreur de date invalide dans Teradata

Ma requête de création:

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

Ma déclaration d'insertion:

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

Ce que j'ai essayé jusqu'à présent:

  • Faire la date_fiel d null par cast(null as date) as date_field
  • vérifier chaque date dans le date_field contre sys_calendar.calendar pour vous assurer qu'ils sont des dates valides
  • Vérification du type par SELECT TYPE (date_field) FROM date_table GROUP BY 1, tous se révèlent être du type 'date'

Tous pensées?

+0

left join pour sys_calendar, en utilisant votre = calendar_date où . est null. Cela vous dira si vous avez des valeurs qui ne sont pas des dates valides. – Andrew

+0

Que se passe-t-il si vous supprimez l'INSERT et si vous exécutez simplement le SELECT? Quel est le type de données de la colonne dans la table source? –

+0

@Andrew, c'est ce que j'ai essayé dans ma deuxième balle. Retourne rien –

Répondre

0

Lorsque vous avez créé Date_Table, le type de données que vous avez spécifié est la date. Peut être le type de données de table a est VARCHAR, ce qui ne correspond pas à Date_Table. C'est la raison pour laquelle vous ne pouvez pas exécuter l'instruction INSERT. Nous pouvons aller pour 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) 'tronquera la date, dans ce cas – voidpro