Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DB2 Discussion :

Problème de date script SQL


Sujet :

DB2

  1. #1
    Nouveau membre du Club
    Problème de date script SQL
    Bonjour,

    Je fais une requête SQL SELECT mais j'ai le message d'erreur : "SQL Error [22007]: [SQL0181] Une valeur de la chaîne date, heure ou horodatage est incorrecte."

    Voici ma requête :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     SELECT * 
     FROM ROXDTA400.STKF0300 A 
     JOIN ROXDTA400.TABJ00141 B ON A.STNSIT = B.CDSITE 
     WHERE ( A.STNLIB <> '-- Trémie --' AND A.STNSIT <> 40 AND DATE(LEFT(STNDAV,4) || '-' || substr(STNDAV,5,2) || '-' || RIGHT(STNDAV,2)) 
     BETWEEN  DATE('2019-01-01') AND DATE('2019-01-04')  );


    Le problème semble venir de la date créée avec le champs STNDAV, car si je remplace avec par exemple DATE('2019-01-03'), ça fonctionne.
    DATE(LEFT(STNDAV,4) || '-' || substr(STNDAV,5,2) || '-' || RIGHT(STNDAV,2)) Me donne le bon format de date.

    Seriez-vous d'où vient le problème ?

    Merci,

  2. #2
    Expert éminent sénior
    Visiblement la colonne SNTDAV est de type char ou varchar, il n'y a donc aucune garantie sur la qualité du contenu.
    C'est une hérésie que de modéliser une base de données dans laquelle le typage des colonnes est inadapté, en particulier du char ou varchar pour une date, c'est dangereux et contre performant.

    De plus, filtrer sur une chaine de caractères est toujours très dangereux
    il est préférable de remplacer WHERE ( A.STNLIB <> '-- Trémie --' ... par un test sur le code correspondant à trémie, ça vous évitera les problèmes éventuels de majuscules/minuscules, caractères diacritiques et autres fantaisies liées à la collation par exemple

  3. #3
    Nouveau membre du Club
    Merci beaucoup pour les explications que vous m'avez apporté

###raw>template_hook.ano_emploi###