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 :

Test sélectif dans clause WHERE


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 34
    Par défaut Test sélectif dans clause WHERE
    Bonjour a tous!

    Voila mon problème :

    Je souhaite exécuter une requête qui contient 4 test dans la clause WHERE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Exemple :
    SELECT * 
    FROM MaTable
    WHERE MaTable.champs1 LIKE ''
    OR (((MaTable.Date BETWEEN '' AND ''))
    OR ((MaTable.Champs2 LIKE '' or MaTable.Champs2 is NULL)
    OR (MaTable.Champs3 LIKE '' or MaTable.Champs2 is NULL)))
    Cette requête fonctionne si j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT * 
    FROM MaTable
    WHERE MaTable.champs1 LIKE 'Test'
    OR (((MaTable.Date BETWEEN '' AND ''))
    OR ((MaTable.Champs2 LIKE '' or MaTable.Champs2 is NULL)
    OR (MaTable.Champs3 LIKE '' or MaTable.Champs2 is NULL)))
    et me sors 4 lignes (normal...)

    mais si par exemple je test le Champs1 et le Champs2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT * 
    FROM MaTable
    WHERE MaTable.champs1 LIKE 'Test'
    OR (((MaTable.Date BETWEEN '' AND ''))
    OR ((MaTable.Champs2 LIKE 'Toto' or MaTable.Champs2 is NULL)
    OR (MaTable.Champs3 LIKE '' or MaTable.Champs2 is NULL)))
    J'obtient le même résultat qu'avec la requête précédente...
    Je voudrais que la requête test les champs qui sont "initialisé" sans prendre en compte ce qui ne le sont pas!

    J'ai mis un OR mais je pense que le mieux serait un OU bit a bit mais je ne sais pas comment faire

    Bon je suis désolé pour ces explications un peu bancales, mais je voit pas trop comment le dire lol

    Merci pour vos réponse!

    SaiBot

  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
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Vous commettez la faut d'utiliser LIKE sans joker. Ceci est stupide. Utilisez =.
    Vous utilisez un mot réservé "date" pour une colonne. ceci est à proscrire ! Sauf si vous aimez les emmerdements....
    Enfin, il est inutile de mettre autant de parenthèses !

    Et pour répondre à votre question, pour synthétiser le NULL avec une valeur utilisez la fonction normative COALESCE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * 
    FROM   MaTable
    WHERE  MaTable.champs1 = ''
       OR  MaTable.Date BETWEEN '' AND ''
       OR  MaTable.Champs2 = COALESCE('', MaTable.Champs2)
       OR  MaTable.Champs3 = COALESCE('', MaTable.Champs3)
    Bref, apprenez SQL. Mon site web, comme mes bouquins, peuvent vous y aider !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 34
    Par défaut
    Alors pour vous répondre si j'ai utilisé Date c'était juste un exemple pour bien illustré que c'était un champs qui contient une date, bref...

    Je ne savais pas pour le LIKE merci de l'info.

    Bref c'est gentil de m'avoir répondu mais pas la peine de me prendre de haut comme sa, j'ai juste posé une question....

    Enfin merci quand même MÔsieur SQLPro!

    A+

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Je voudrais que la requête test les champs qui sont "initialisé" sans prendre en compte ce qui ne le sont pas!

    J'ai mis un OR mais je pense que le mieux serait un OU bit a bit mais je ne sais pas comment faire
    Est-ce à dire que vous souhaiteriez voir votre clause WHERE changer suivant les variables que vous passeriez en paramètre à une procédure stockée ?
    Si tel est le cas, envisagez de faire cela en SQL dynamique

    @++

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 123
    Par défaut
    Citation Envoyé par SaiBot Voir le message

    Bref c'est gentil de m'avoir répondu mais pas la peine de me prendre de haut comme sa, j'ai juste posé une question....

    A+
    Bonjour,

    ne le prenez pas mal car c'est une critique constructive !

    je suis passé par là aussi et ça me permet de bien réfléchir et surtout bien se documenter sur le net avant de poster sur le forum

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 34
    Par défaut
    Citation Envoyé par verbal34 Voir le message
    Bonjour,

    ne le prenez pas mal car c'est une critique constructive !
    Non je ne le prends pas mal lol, loin de la, juste je trouvais la réponse un peu froide mais c'est OK

    Alors c'est bon je viens de trouver la solution enfaites il fallais que je rajoute un %!

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 123
    Par défaut
    Citation Envoyé par SaiBot Voir le message
    Alors c'est bon je viens de trouver la solution enfaites il fallais que je rajoute un %!
    OUI c'est le joker
    Citation Envoyé par SQLpro Voir le message
    Vous commettez la faut d'utiliser LIKE sans joker.

Discussions similaires

  1. [t-sql] instruction CASE dans clause WHERE
    Par ignitionflip dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/01/2007, 18h07
  2. Réponses: 8
    Dernier message: 16/11/2006, 13h31
  3. Select dans clause Where
    Par Bisûnûrs dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/08/2006, 11h50
  4. [PL/SQL Oracle] Syntaxe dans clause where
    Par Misdrhaal dans le forum Oracle
    Réponses: 2
    Dernier message: 01/03/2006, 13h33
  5. INNER JOIN ... ON ... ou jointure dans clause where
    Par schmur1 dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 28/06/2005, 09h16

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