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 :

Problème avec fonction iif


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 338
    Points : 120
    Points
    120
    Par défaut Problème avec fonction iif
    bonjour

    dans ma table, j'ai 2 champs ("datesortie" et "volumesorti") qui peuvent prendre des valeurs nulles.
    je veux construire une requête (avec la fonction "IIF") dans laquelle le champ "datesortie" prennent la valeur "01/01/1900" lorsqu'il est nul et le champ "volumesorti" la valeur "0" lorsqu'il est nul aussi.

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 338
    Points : 120
    Points
    120
    Par défaut
    lorsque je fais la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select IIF(IsNull(DateSortie,True),'1900-01-01',DateSortie),IIF(IsNull(VolumeSorti,True),0,VolumeSorti) from TABLE
    il me revient que IIF n'est pas une fonction reconnue

  3. #3
    Membre chevronné

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    Bonjour,

    Effectivement IIF n'est pas une fonction du langage T-SQL.
    Regardez du cote de ISNULL et/ou COALESCE.

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 338
    Points : 120
    Points
    120
    Par défaut
    autant pour moi. IIF n'existe pas en SQL Server.

    il fallait plutot faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select case when datesortie is null then '1900-01-01' else datesortie end as DS,case when volumesorti is null then 0 else volumesorti end as VS from TABLE

  5. #5
    Membre chevronné

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    Ou avec les fonctions proposees ci dessus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT 
       ISNULL(datesortie, '1900-01-01') AS DS,
       ISNULL(volumesorti, 0) AS VS 
    FROM TABLE
    Bonne journee

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 338
    Points : 120
    Points
    120
    Par défaut
    un autre problème se pose par la suite et j'ai pas trouvé nécessaire d'ouvrir une autre discussion
    voilà:

    je veux filtrer par date de sortie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select datesortie,volumesorti from table where (datesortie between '2011-01-01' and '2012-02-06')
    je veux qu'au moment de l'exécution de la requête, les valeurs nulles du champ "datesortie" prennent la valeur "2011-01-01" et s'affichent dans une grille dans laquelle les valeurs "2011-01-01" sont invisibles.

    j'espère avoir bien exposé mes préoccupation

  7. #7
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Noter que la fonction ISNULL n'est pas une fonction standard SQL. c'est un bidouillage de MS pour SQL SERVER. Cette fonction dans certaine condition renvoie des résultats erronés !

    Dans votre cas utiliser plutôt la fonction CASE.

    Noter aussi que :
    -->la fonction COALESCE est un cas particulier de CASE
    --> COALESCE fait partie de la norme SQL et il est plus fiable et plus flexible que ISNULL.
    --> la fonction NULLIF prévue par la norme SQL est aussi un cas particulier de CASE

  8. #8
    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 : 43
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Citation Envoyé par zinzineti
    Cette fonction dans certaine condition renvoie des résultats erronés !
    Tu peux préciser ?

    Citation Envoyé par djelloharmel
    IIF n'existe pas en SQL Server.
    Si, mais dans SQL Server 2012.
    Et de toute façon, comme le dit zinzineti :

    - ça ne fait pas partie de la norme SQL; c'et une adaptation de VB (qui est une langage que je déteste, mais pas autant que COBOL )
    - c'est de la bidouille

    @++

Discussions similaires

  1. Problème avec fonctions et string/char
    Par vdumont dans le forum C++
    Réponses: 6
    Dernier message: 08/04/2006, 16h54
  2. Problème avec fonction
    Par Goundy dans le forum C
    Réponses: 24
    Dernier message: 01/10/2005, 20h17
  3. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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