Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/02/2012, 09h23   #1
Futur Membre du Club
 
Inscription : novembre 2005
Messages : 90
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 90
Points : 19
Points : 19
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.
djelloharmel est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/02/2012, 10h16   #2
Futur Membre du Club
 
Inscription : novembre 2005
Messages : 90
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 90
Points : 19
Points : 19
lorsque je fais la requête

Code :
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
djelloharmel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 10h28   #3
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 159
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

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

Informations forums :
Inscription : août 2007
Messages : 1 159
Points : 1 615
Points : 1 615
Bonjour,

Effectivement IIF n'est pas une fonction du langage T-SQL.
Regardez du cote de ISNULL et/ou COALESCE.
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 10h30   #4
Futur Membre du Club
 
Inscription : novembre 2005
Messages : 90
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 90
Points : 19
Points : 19
autant pour moi. IIF n'existe pas en SQL Server.

il fallait plutot faire

Code :
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
djelloharmel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 10h59   #5
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 159
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

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

Informations forums :
Inscription : août 2007
Messages : 1 159
Points : 1 615
Points : 1 615
Ou avec les fonctions proposees ci dessus:

Code :
1
2
3
4
SELECT 
   ISNULL(datesortie, '1900-01-01') AS DS,
   ISNULL(volumesorti, 0) AS VS 
FROM TABLE
Bonne journee
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 11h00   #6
Futur Membre du Club
 
Inscription : novembre 2005
Messages : 90
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 90
Points : 19
Points : 19
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 :
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
djelloharmel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 11h33   #7
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 470
Points : 2 470
Envoyer un message via Yahoo à zinzineti
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
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 15h50   #8
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 674
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 674
Points : 8 741
Points : 8 741
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

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h25.


 
 
 
 
Partenaires

Hébergement Web