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

SQL Procédural MySQL Discussion :

Clause Where en fonction de la valeur d'un champs


Sujet :

SQL Procédural MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Points : 44
    Points
    44
    Par défaut Clause Where en fonction de la valeur d'un champs
    Bonjour,

    J'ai une table "events" avec les champs "date_start" et "date_end". Le champs "date_start" est toujours une date valide, alors que le champs "date_end" peut être NULL. En effet, certains events se produisent sur un seul jour alors que d'autres se produisent sur une période.

    Je cherche la requête SQL qui extrait les events de la façon suivante:

    - si "date_end" = NULL alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE date_start = date
    - sinon ("date_end" est renseigné) alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE date_start => date <= date end
    En d'autre termes, j'aimerais que mon SELECT renvoit les enregistrements selon ma clause WHERE qui dépend de la valeur de mon champs "date_end". Donc, pour chaque ligne il fat tester d'abord le champs "date_end" et en fonction du résultat la clause WHERE de la requête sera différente.

    Comment faire cela en une seule requête?

    Merci...

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE  `date` BETWEEN  date_start AND COALESCE( date_end,  date_start)
    attention à date qui est un mot réservé.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Merci pour votre réponse, Antoun! Êtes-vous l'auteur du livre mentionné dans votre signature?

    Citation Envoyé par Antoun
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE  `date` BETWEEN  date_start AND COALESCE( date_end,  date_start)
    attention à date qui est un mot réservé.
    Si je comprend bien cette requête, COALESCE va d'abord retourner 'date_end' s'il est NULL, sinon 'date_start' qui n'est jamais NULL.

    Puis, si la valeur de 'date' est égale à 'date_end' alors l'expression 'BETWEEN date_start AND date_end' est toujours vraie.

    Est-ce bien cela?

    Autre question: si un champs date contient la valeur '0000-00-00' est-ce la même chose que la valeur NULL (et donc COALESCE reste utile dans ce cas)?

    Encore merci...

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    Citation Envoyé par gb-ch
    Merci pour votre réponse, Antoun! Êtes-vous l'auteur du livre mentionné dans votre signature?
    j'ai cet honneur
    Citation Envoyé par gb-ch
    Si je comprend bien cette requête, COALESCE va d'abord retourner 'date_end' s'il est NULL, sinon 'date_start' qui n'est jamais NULL.

    Puis, si la valeur de 'date' est égale à 'date_end' alors l'expression 'BETWEEN date_start AND date_end' est toujours vraie.

    Est-ce bien cela?
    c'est exactement ça !
    Citation Envoyé par gb-ch
    Autre question: si un champs date contient la valeur '0000-00-00' est-ce la même chose que la valeur NULL (et donc COALESCE reste utile dans ce cas)?
    non, 0 (ou en date, '0000-00-00') et NULL n'ont rien à voir et ne répondent pas aux mêmes règles de calcul.

    la solution peut être de remplacer tes 0 par des NULL dans la base, ou de faire la même chose dynamiquement dans la requête avec NULLIF, ou encore de faire une condition complexe avec CASE WHEN.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/02/2011, 09h18
  2. Vue avec clause Where en fonction du USER
    Par lunab54 dans le forum Oracle
    Réponses: 8
    Dernier message: 29/08/2006, 18h39
  3. requete ajout en fonction de la valeur d'un champ ?
    Par mat75019 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 22/06/2006, 10h17
  4. afficher une image en fonction de la valeur d un champ
    Par zahiton dans le forum Langage
    Réponses: 3
    Dernier message: 24/01/2006, 16h22
  5. Pb pour créer un ID en fonction de la valeur d'un champ....
    Par zouzou.net dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/03/2004, 11h11

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