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

Développement SQL Server Discussion :

CASE DATEPART Erreur non booleén spécifiée


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire Base de données Commerciales
    Inscrit en
    Août 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Gestionnaire Base de données Commerciales

    Informations forums :
    Inscription : Août 2015
    Messages : 7
    Points : 6
    Points
    6
    Par défaut CASE DATEPART Erreur non booleén spécifiée
    Bonjour,

    Je souhaite filtrer uniquement les jours ouvrés de la semaine, et retourner la date de la veille ouvré.
    Ex: SI aujourd’hui Lundi ALORS date Vendredi

    J'ai une erreur que n'arrive pas à trouver dans le CASE de ma clause WHERE.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SET DATEFIRST 1
    SELECT s.createddatetime as [Date création]
     
    FROM SALESLINE s
     
    WHERE 
     
    CASE 
         WHEN datepart(dw,getdate()) = 7 THEN day(salesline.createddatetime) - 2
         WHEN datepart(dw,getdate()) = 1 THEN day(salesline.createddatetime) - 3
    ELSE day(salesline.createddatetime) - 1
    END
    Merci d'avance pour vos éclaircissement.

    Base de donnée: SQL Server 2012

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    La clause WHERE attend une condition (expression booléenne) et ici l'expression CASE...END retourne un entier.
    Il est donc tout à fait normal que la requête ne puisse s'exécuter.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    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 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Un WHERE sans opérateur de comparaison c'est juste pas possible.

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT s.createddatetime as [Date création]
    FROM SALESLINE s
    WHERE CASE .... END = ???
    Ou > ou <= etc...

    A +

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire Base de données Commerciales
    Inscrit en
    Août 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Gestionnaire Base de données Commerciales

    Informations forums :
    Inscription : Août 2015
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci pour votre analyse l'erreur n’apparaît plus .

    Cependant je n'arrive pas récupérer la date de la veille pour ma colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    salesline.createddatetime
    alors que je sais quelle existe.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SET DATEFIRST 1
    SELECT s.createddatetime as [Date création]
     
    FROM SALESLINE s
    
    CASE 
        WHEN datepart(dw,getdate()) = 7 THEN day(salesline.createddatetime)-2
        WHEN datepart(dw,getdate())=1 THEN day(salesline.createddatetime)-3
    ELSE day(salesline.createddatetime)
    END = getdate() -1

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Essayez "cast(getDate() As Date)" à la place.
    Car getdate() ramène la date + l'heure.

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

Discussions similaires

  1. InfoPath : Erreur non spécifiée
    Par olivierlem dans le forum InfoPath
    Réponses: 7
    Dernier message: 01/09/2008, 10h04
  2. Erreur non spécifiée
    Par Neuromancien2 dans le forum ASP
    Réponses: 4
    Dernier message: 15/06/2007, 11h58
  3. [AJAX] erreur "non spécifiée" sur IE en AJAX
    Par khoudj dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/01/2007, 20h59
  4. Erreur non spécifiée... plus de form
    Par directs dans le forum EDI
    Réponses: 5
    Dernier message: 26/01/2006, 10h31

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