2010-09-28 2 views
2

J'essaye d'interroger une table qui a une colonne "VALUE" de varchar (100). Cette colonne peut contenir n'importe quoi d'une lettre, d'un chiffre ou, dans ce cas, d'une date.Teradata - Invalide Date fournie pour FIELD

La date sera toujours inscrite dans le tableau sous la forme 'AAAA-mm-jj'. Cependant, quand je lance la requête suivante:

select * from myTable 
where VALUE = '2009-12-11' (Date, Format 'yyyy-mm-dd') 

Je reçois l'erreur suivante:

Invalid date supplied for myTable.VALUE. 

l'exemple de la table de valeurs: (1, '122') (2, 'rouge' (3, '2009-12-11')

Des idées sur ce qui pourrait être à l'origine de cela?

Merci!

Répondre

2

Si le type de données est déclaré comme varchar, il doit simplement le traiter comme une chaîne. essayer de ne pas spécifier quoi que ce soit sur le format de date, comme

select * from myTable 
where VALUE = '2009-12-11' 
0

Si vous exécutez une requête expliquer sur la, vous pouvez voir qu'il est coulée de la valeur à ce jour avant de comparer contre votre valeur fournie. Si vous avez une autre colonne qui enregistre avec précision le type de contenu de VALUE, vous pouvez l'ajouter à la clause where et vous n'obtiendrez plus l'erreur (voir ci-dessous). Sinon, allez avec la recommandation de Beth.

select * from myTable 
where VALUE = '2009-12-11' (Date, Format 'yyyy-mm-dd') 
and VALUE_TYPE = 'DATE'; 
0

Le calcul de la date interne Teradata est (year - 1900) * 10000 + (month * 100) + day.

Donc, si la date est 02/11/2009 (2e Novembre 2010) puis

=(2009-1900) * 10000 + (11 * 100) + 2 
=109 * 10000 + 1100 + 2 
=1090000 + 1100 + 2  
=1090000 
    1100 
     2 
---------- 
1091102 
---------- 

donc 2 novembre 2009 est stocké dans Teradata comme 1091102. Vous pouvez extraire au format requis par coulée (comme u l'ai dans varchar). J'espère que cela t'aides.

0

Est-il possible que VALUE soit un mot réservé dans Teradata? Si oui, vous devez mettre cela entre guillemets:

 
select * 
from myTable 
where "VALUE" = '2009-12-11'