IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

MS SQL Server Discussion :

Out-of-range value que dans une clause WHERE


Sujet :

MS SQL Server

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut Out-of-range value que dans une clause WHERE
    Bonjour,

    Je viens encore une fois demander votre aide...
    J'essaye de faire tourner la requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT cast(cdagen as int) as ag, nocmpt as compte,  
     
    cast(substring(substring(donnees, 187, 8), 5, 2)+'-'+substring(substring(donnees, 187, 8), 7, 2)+'-'+substring(substring(donnees, 187, 8), 1, 4) as datetime) as preinc 
     
    FROM PACK10PDTA.DB2IS20FR.pack10pdta.FCISTKP000
     
    where typcle='I' and substring(DONNEES, 22, 1)<>'P'  
     and cast(substring(substring(donnees, 187, 8), 5, 2)+'-'+substring(substring(donnees, 187, 8), 7, 2)+'-'+substring(substring(donnees, 187, 8), 1, 4) as datetime)>=dateadd(month, -2, getdate())
     
    order by substring(donnees, 187, 8)  desc
    ce qui donne l'erreur: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

    Mais si j'essaye (j'enleve la dernière condition de la clause WHERE)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT cast(cdagen as int) as ag, nocmpt as compte,  
     
    cast(substring(substring(donnees, 187, 8), 5, 2)+'-'+substring(substring(donnees, 187, 8), 7, 2)+'-'+substring(substring(donnees, 187, 8), 1, 4) as datetime) as preinc 
     
    FROM PACK10PDTA.DB2IS20FR.pack10pdta.FCISTKP000
     
    where typcle='I' and substring(DONNEES, 22, 1)<>'P'  
    -- and cast(substring(substring(donnees, 187, 8), 5, 2)+'-'+substring(substring(donnees, 187, 8), 7, 2)+'-'+substring(substring(donnees, 187, 8), 1, 4) as datetime)>=dateadd(month, -2, getdate())
     
    order by substring(donnees, 187, 8)  desc
    tout marche bien

    Est-ce que quelqu'un saurait dire quel est le problème?

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 922
    Points : 51 715
    Points
    51 715
    Billets dans le blog
    6
    Par défaut
    La conversion implicite d'une chaine de caractères en un DATETIME doit être au format AAAAMMJJ sans aucun tiret (norme ISO court)

    Sinon utilisez la fonction de conversion CONVERT, avec ses différents formats.

    Lisez l’article que nous avons écrit à ce sujet : http://baptiste-wicht.developpez.com...-sql/datetime/

    A +

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    Bonjour et merci de votre aide SQLpro,


    J'ai affectivement mis
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    cast(substring(substring(donnees, 187, 8), 1, 4)+substring(substring(donnees, 187, 8), 5, 2)+substring(substring(donnees, 187, 8), 7, 2) as datetime)>=dateadd(month, -2, getdate())
    dans la clause WHERE et la requête a bien marché.

    La seule chose qui je ne comprends pas est pourquoi le CAST marche dans le SELECT et pas dans le WHERE...

    (Je sais pas si c'est sur votre lien, il donne sur une page introuvable)

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 922
    Points : 51 715
    Points
    51 715
    Billets dans le blog
    6
    Par défaut
    Le select vous renvoi une chaine de caractères qui ne représente rien d'autre ... qu'une chaine de caractères !

    Alors que dans le WHERE il tente de transtyper en DATE ce qui est impossible.

    A +

  5. #5
    Membre averti
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Points : 375
    Points
    375
    Par défaut
    alors essaie celui-là
    http://linesofcode.net/snippets/45

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser un alias de colonne dans une clause Where MS SQL
    Par sir dragorn dans le forum Langage SQL
    Réponses: 11
    Dernier message: 12/10/2011, 10h31
  2. [SQL2K][TSQL] Peut-on utiliser un alias dans une clause Where ?
    Par StormimOn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/05/2006, 10h25
  3. Réponses: 1
    Dernier message: 03/02/2006, 13h35
  4. fonction booleenne dans une clause where ?
    Par user_h dans le forum Oracle
    Réponses: 1
    Dernier message: 20/10/2005, 16h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo