|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre régulier
![]() Inscription : juin 2007 Messages : 89 ![]() |
Bonjour,
Je cherche à valider des dates stockées sous forme de char(8) au format 'YYYYMMDD'. J'essaie donc de transformer le texte en date grace à cette petite transformation: Code :
date(LEFT(DATEOV,4) || '-' || substr(DATEOV,5,2) || '-' || RIGHT(DATEOV,2)) Code :
Code :
Code :
Error: java.sql.SQLException: [SQL0104] Elément syntaxique <FIN-INSTRUCTION> n'est pas correct. Eléments possibles : < > = <> <= !< !> != >= ¬< ¬> ¬= IN. Cause . . . . . : Une erreur de syntaxe a été détectée au niveau de l'élément <FIN-INSTRUCTION>. <FIN-INSTRUCTION> n'est pas un élément correct. < > = <> <= !< !> != >= ¬< ¬> ¬= IN est une liste partielle des éléments corrects. Cette liste suppose que l'instruction est correcte jusqu'à cet élément. L'erreur peut être située plus haut dans l'instruction, mais la syntaxe de l'instruction apparaît correcte jusqu'à ce point. Que faire . . . : Effectuez les opérations suivantes, puis renouvelez votre demande : - Vérifiez l'instruction au niveau de l'élément <FIN-INSTRUCTION>. Corrigez-la. Il peut s'agir d'une virgule ou de guillemets manquants, ou de clauses mal ordonnées. - Si l'erreur porte sur <FIN-INSTRUCTION>, corrigez l'instruction SQL qui ne se termine pas sur une clause correcte., SQL State: 42601, Error Code: -104 Pour infos, il s'agit d'un db2/400 (iSeries). |
||||
|
|
00
|
|
|
#2 | |
|
Membre du Club
![]() Inscription : février 2007 Messages : 56 ![]() |
Bonjour,
Dans ta requête... Citation:
Ou alors, peut être que tu veux tester si la fonction DATE renvoie NULL ? Dans ce cas, il faut utiliser l'opérateur IS NULL ou IS NOT NULL (selon ce que tu veux). X. |
|
|
|
00
|
|
|
#3 | ||
|
Membre régulier
![]() Inscription : juin 2007 Messages : 89 ![]() |
Evidemment, j'en suis désolé
il fallait lire: Code :
Code :
[SQL0181] Une valeur de la chaîne date, heure ou horodatage est incorrecte. Cause . . . . . : La représentation dans la chaîne d'une valeur de date, d'heure ou d'horodatage ne se trouve pas dans la fourchette admise. *N est soit la constante (chaîne de caractères) incorrecte, soit la variable hôte ou la colonne qui contient cette chaîne. Si le nom est *N, la valeur a été trouvée dans une expression indiquée dans l'instruction. Si la valeur a été trouvée dans une variable hôte, celle-ci porte le numéro 0. Les fourchettes admises pour les valeurs de date, d'heure ou d'horodatage sont les suivantes : - Pour les années : de 0001 à 9999. - Pour les mois : de 1 à 12. - Pour les jours : de 1 à 30 pour avril, juin, septembre et novembre, de 1 à 28 pour février et de 1 à 31 pour tous les autres mois. En cas d'année bissextile, la fourchette pour février va de 1 à 29. - Pour les jours dans une date au format julien : de 001 à 366 pour une année bissextile et de 001 à 365 jours dans le cas contraire. - Pour les heures : de 0 à 24. Si l'heure est 24, alors les autres parties des valeurs TIME doivent être égales à zéro. Si le format d'heure est USA, la valeur maximale admise est 12. - Pour les minutes : de 0 à 59. - Pour les secondes : de 0 à 59. - Pour les microsecondes : de 0 à 999999. Que faire . . . : Assurez-vous que la valeur de date, d'heure ou d'horodatage est correcte pour le type de données qu'elle représente. Renouvelez votre demande., SQL State: 22007, Error Code: -181 |
||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Quel est l'OS ?
|
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() Inscription : juin 2007 Messages : 89 ![]() |
iSeries i5: Version 5 Release 3 Modification 0
|
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
|
|
|
00
|
|
|
#7 | |
|
Membre régulier
![]() Inscription : juin 2007 Messages : 89 ![]() |
Citation:
|
|
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Exact, je me suis trompé d'OS, désolé.
Mais, AMHA il y a de la choucroute dans la colonne DATEOV. Ce champ n'est pas nul et contient une date non conforme, par ex. mois = 13, année = ^^07, jour = 32, ou date = 21062007 au lieu de 20070621 ou autre fantaisie du même genre. |
|
|
00
|
|
|
#9 |
|
Membre régulier
![]() Inscription : juin 2007 Messages : 89 ![]() |
C'est exactement le but de la requête, identifier les données non conformes.
D'ailleurs renvoie null, c'est donc pour ça que je cherche à faire un test de nullité sur la valeur de cette expression. |
|
|
00
|
|
|
#10 | ||||
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Utiliser cet artifice pour savoir si le contenu de la colonne est erroné me semble un tantinet risqué
Fonction DateErr Code :
On la place dans un membre source de type SQL dans le fichier source QSQLSRC qu'on crée au préalable si besoin avec la commande standard Code :
CRTSRCPF FILE(MABIB/QSQLSRC) RCDLEN(92) TEXT('Membres source SQL') Code :
RUNSQLSTM SRCFILE(MABIB/QSQLSRC) SRCMBR(DATEERR) COMMIT(*NONE) Enfin, on utilise la fonction directement sur le prédicat WHERE et/ou dans la clause SELECT : Code :
|
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com