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

Langage SQL Discussion :

renvoyer Vrai-faux


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 210
    Points : 103
    Points
    103
    Par défaut renvoyer Vrai-faux
    Comment renvoyer vrai ou faux en SQL ?

    Nous avons un table TaSurSite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	Id_SurSite		int
    	DateIntervention	datetime
    	Id_Client		int
    	Duree		int
    	HeureArrive	datetime	
    	HeureDepart	datetime
    Je veux veux faire une requète me retournant vrai quand il existe un enregistrement avec HeureDepart nulle.

    En bref comment vérifier si il existe une inter sur site non close...

    J'espère avoir été clair...

    Merci, Nicolas

  2. #2
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    le vrai et le faux s'interprète dans SQL:
    si la requête te retourne un résultat alors c'est vrai,
    sinon si aucun resultat n'est retourné alors c'est faux.


    A+

  3. #3
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Une méthode, sûrement pas la plus propre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT 'true' 
    FROM dual
    WHERE EXISTS
    (SELECT * FROM TaSurSite
     WHERE HeureDepart is null)

  4. #4
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 210
    Points : 103
    Points
    103
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT 'true' 
    FROM dual 
    WHERE EXISTS 
    (SELECT * FROM TaSurSite 
     WHERE HeureDepart is null)
    Je ne comprends pas le FROM dual...

  5. #5
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    dual est, si tu utilises Oracle(!!!) en quelque sorte la table system.

    Par exemple si tu veux faire une requête pour calculer 2+2, tu peux le faire par un select mais tu n'as pas de table à interroger tu fais donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT 2+2
    FROM dual
    Si tu utilises un autre SGBD que Oracle je ne sais pas comment ça fonctionne mais tu peux toujours tenter le coup

  6. #6
    Membre confirmé
    Avatar de Higgins
    Inscrit en
    Juillet 2002
    Messages
    520
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 520
    Points : 543
    Points
    543
    Par défaut
    Je supppose que dual est une table "bidon" un peu comme "dummy" sur SQLAnywhere.
    Au risque d'être contredit par SQLPRO , il me semble que le type booléen n'existe pas en SQL et qu'il faut "ruser" avec des valeurs 0 et 1

  7. #7
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Citation Envoyé par Higgins
    Je supppose que dual est une table "bidon" un peu comme "dummy" sur SQLAnywhere.
    Au risque d'être contredit par SQLPRO , il me semble que le type booléen n'existe pas en SQL et qu'il faut "ruser" avec des valeurs 0 et 1
    En fait, le type boolean existe dans un SGBD et les valeurs Vrai/Faux dépendent du SGBD, par exemple :
    ACCESS ==> Faux=0 et Vrai=-1
    Sybase ==> Faux=0 et Vrai=1
    Oracle ==> Faux=F et Vrai=T (je crois)

  8. #8
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Si je te confirme bien le type booléen sous Access, je peux te dire que ce type de donnée n'existe pas sous Oracle et qu'il faut donc bien, comme disais Higgins, ruser avec des types 'int' en affectant par exemple 0 pour faux et vrai pour toute autre valeur

  9. #9
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 210
    Points : 103
    Points
    103
    Par défaut
    Je bosse avec SQL Server. comment on traduit ça ?

    D'autre part je viens de m'apercevoir que mon problème est plus compliqué que ça

    Je répète mon objectif :

    J'ai besoin d'une requête qui me renvoie Vrai ou Faux (O ou 1, pas d'importance) lorsque que pour un Id_Client donné, il existe une intervention non cloturée.

    Or on peut avoir 3 cas :
    1- Id_Client sans aucune intervention ouverte
    2- Id_Client avec Intervention ouverte mais pas fermée
    3- Id_Client avec intervention ouverte puis fermée

    (par ouverte j'entends avec une heure de début et par fermée j'entends avec une heure de fin)

    je dois avoir Vrai pour le cas 2 et Faux dans les cas 1 et 3?

  10. #10
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    Je te propose de faire une requête avec une clause WHERE qui teste si
    Id_Client est avec Intervention ouverte mais pas fermée.

    puis tu teste la variable @@rowcount

    si @@rowcount<>0 alors tu as ta valeurs vrai
    sinon si @@rowcount=0 alors tu as ta valeur faux.


    A+

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    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 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    1) le type booléeen existe bien dans le norme SQL:1999. Il est sur une logique 3 états : TRUE / FALSE et UNKNOWN (NULL)
    2) en SQL Server, il faut utiliser le type BIT qui prend comme valeur 0 ou 1 voire le marqueur NULL.

    A +

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

Discussions similaires

  1. vrai faux comment ecrire dans une requete
    Par pat1545 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 07/08/2006, 17h25
  2. Mise à jour d'un champs vrai/faux (vba)
    Par friiitz dans le forum Access
    Réponses: 2
    Dernier message: 04/05/2006, 10h28
  3. Réponses: 2
    Dernier message: 21/10/2005, 13h22
  4. "compte invité = antivirus" vrai, faux? qu'en pens
    Par sommerset dans le forum Autres Logiciels
    Réponses: 13
    Dernier message: 28/02/2005, 17h02
  5. Vrai/Faux
    Par jfox dans le forum Débuter
    Réponses: 5
    Dernier message: 23/09/2003, 09h04

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