Requête SQL - Remplacer NULL
FrAnKiBoY
-
FrAnKiBoY -
FrAnKiBoY -
Bonjour, je recherche une facon de remplacer une valeur null en date.
Bref, mon problème est que je doit vérifier une date entre deux autres mais c'est pour des contrats et il arrive des fois où le contrat n'a pas de date de fin donc il est à null. J'aimerais si c'est possible être capable de faire mon beetween pareil mais avec une date bidon genre 9999-01-01 à place que ma requête me retourne rien car il trouve un null dans la datede fu. Merci
Voici ma requête présentement :
SELECT CONTRAT.NOM_DEPARTEMENT, EMPLOYE.NOM, EMPLOYE.PRENOM, AFF_EMP_CLASS.CODE_CLASSEMENT, BANQUE_VACANCE.VALEUR, SALAIRE.TAUX_HORAIRE
FROM (((EMPLOYE INNER JOIN AFF_EMP_CLASS ON EMPLOYE.NO_EMPLOYE=AFF_EMP_CLASS.NO_EMPLOYE) INNER JOIN BANQUE_VACANCE ON EMPLOYE.NO_EMPLOYE=BANQUE_VACANCE.NO_EMPLOYE) INNER JOIN CONTRAT ON EMPLOYE.NO_EMPLOYE=CONTRAT.NO_EMPLOYE) INNER JOIN SALAIRE ON EMPLOYE.NO_EMPLOYE=SALAIRE.NO_EMPLOYE
WHERE ([DATE_JOUR] BETWEEN (AFF_EMP_CLASS.DATE_DEBUT) AND (AFF_EMP_CLASS.DATE_FIN)) AND ([DATE_JOUR] BETWEEN (CONTRAT.DATE_DEBUT) AND (CONTRAT.DATE_FIN)) AND ([DATE_JOUR] BETWEEN (SALAIRE.DATE_DEBUT) AND (SALAIRE.DATE_FIN)) AND ([DATE_JOUR] BETWEEN (BANQUE_VACANCE.DATE_DEBUT) AND (BANQUE_VACANCE.DATE_FIN)) AND ((EMPLOYE.NO_EMPLOYE)=[NO_DE_EMPLOYE]);
Bref, mon problème est que je doit vérifier une date entre deux autres mais c'est pour des contrats et il arrive des fois où le contrat n'a pas de date de fin donc il est à null. J'aimerais si c'est possible être capable de faire mon beetween pareil mais avec une date bidon genre 9999-01-01 à place que ma requête me retourne rien car il trouve un null dans la datede fu. Merci
Voici ma requête présentement :
SELECT CONTRAT.NOM_DEPARTEMENT, EMPLOYE.NOM, EMPLOYE.PRENOM, AFF_EMP_CLASS.CODE_CLASSEMENT, BANQUE_VACANCE.VALEUR, SALAIRE.TAUX_HORAIRE
FROM (((EMPLOYE INNER JOIN AFF_EMP_CLASS ON EMPLOYE.NO_EMPLOYE=AFF_EMP_CLASS.NO_EMPLOYE) INNER JOIN BANQUE_VACANCE ON EMPLOYE.NO_EMPLOYE=BANQUE_VACANCE.NO_EMPLOYE) INNER JOIN CONTRAT ON EMPLOYE.NO_EMPLOYE=CONTRAT.NO_EMPLOYE) INNER JOIN SALAIRE ON EMPLOYE.NO_EMPLOYE=SALAIRE.NO_EMPLOYE
WHERE ([DATE_JOUR] BETWEEN (AFF_EMP_CLASS.DATE_DEBUT) AND (AFF_EMP_CLASS.DATE_FIN)) AND ([DATE_JOUR] BETWEEN (CONTRAT.DATE_DEBUT) AND (CONTRAT.DATE_FIN)) AND ([DATE_JOUR] BETWEEN (SALAIRE.DATE_DEBUT) AND (SALAIRE.DATE_FIN)) AND ([DATE_JOUR] BETWEEN (BANQUE_VACANCE.DATE_DEBUT) AND (BANQUE_VACANCE.DATE_FIN)) AND ((EMPLOYE.NO_EMPLOYE)=[NO_DE_EMPLOYE]);
A voir également:
- Sql remplacer null par vide
- Remplacer disque dur par ssd - Guide
- Supprimer page word vide - Guide
- Remplacer par word - Guide
- Caractere vide - Guide
- Remplacer 0 par vide excel ✓ - Forum Excel
2 réponses
Je suis pas sûr d'avoir compris...
J'aimerais si c'est possible être capable de faire mon beetween pareil mais avec une date bidon genre 9999-01-01 à place que ma requête me retourne rien car il trouve un null dans la datede fu.
Tu veux que ta valeur de retour soit défini à une date par défaut si sa valeur est NULL ?
Si c'est le cas, tu as la fonction SQL "IFNULL" (ou ISNULL pour MSSQL) à utiliser comme suit :
SELECT IFNULL(nom_champ, 'valeur_de_remplacement_si_NULL') FROM nom_table;
Ca a pour effet de remplacer les valeur NULL par une valeur par défaut définie lors du retour des données
http://www.smallsql.de/doc/sql-functions/system/ifnull.html
Mais ta requête ne renvois pas la date, et donc ne te renvois pas de valeur NULL pour la date... C'est pour ça que jesuis pas sûr d'avoir compris.
J'aimerais si c'est possible être capable de faire mon beetween pareil mais avec une date bidon genre 9999-01-01 à place que ma requête me retourne rien car il trouve un null dans la datede fu.
Tu veux que ta valeur de retour soit défini à une date par défaut si sa valeur est NULL ?
Si c'est le cas, tu as la fonction SQL "IFNULL" (ou ISNULL pour MSSQL) à utiliser comme suit :
SELECT IFNULL(nom_champ, 'valeur_de_remplacement_si_NULL') FROM nom_table;
Ca a pour effet de remplacer les valeur NULL par une valeur par défaut définie lors du retour des données
http://www.smallsql.de/doc/sql-functions/system/ifnull.html
Mais ta requête ne renvois pas la date, et donc ne te renvois pas de valeur NULL pour la date... C'est pour ça que jesuis pas sûr d'avoir compris.
Ca doit être possible de le mettre dans le WHERE, je n'ai pas tester, mais tu peux faire le test et nous dire ;)
J'ai trouvé on doit utiliser NZ avec accès et j'ai fait cela
SELECT CONTRAT.NOM_DEPARTEMENT, EMPLOYE.NOM, EMPLOYE.PRENOM,
AFF_EMP_CLASS.CODE_CLASSEMENT, BANQUE_VACANCE.VALEUR, SALAIRE.TAUX_HORAIRE
FROM (((EMPLOYE INNER JOIN AFF_EMP_CLASS ON EMPLOYE.NO_EMPLOYE=AFF_EMP_CLASS.NO_EMPLOYE)
INNER JOIN BANQUE_VACANCE ON EMPLOYE.NO_EMPLOYE=BANQUE_VACANCE.NO_EMPLOYE)
INNER JOIN CONTRAT ON EMPLOYE.NO_EMPLOYE=CONTRAT.NO_EMPLOYE)
INNER JOIN SALAIRE ON EMPLOYE.NO_EMPLOYE=SALAIRE.NO_EMPLOYE
WHERE ([DATE_JOUR] BETWEEN (AFF_EMP_CLASS.DATE_DEBUT) AND NZ(AFF_EMP_CLASS.DATE_FIN,#01/01/9999#))
AND ([DATE_JOUR] BETWEEN (CONTRAT.DATE_DEBUT) AND NZ(CONTRAT.DATE_FIN,#01/01/9999#))
AND ([DATE_JOUR] BETWEEN (SALAIRE.DATE_DEBUT) AND NZ(SALAIRE.DATE_FIN,#01/01/9999#))
AND ([DATE_JOUR] BETWEEN (BANQUE_VACANCE.DATE_DEBUT) AND NZ(BANQUE_VACANCE.DATE_FIN,#01/01/9999#))
AND ((EMPLOYE.NO_EMPLOYE)=[NO_DE_EMPLOYE]);
SELECT CONTRAT.NOM_DEPARTEMENT, EMPLOYE.NOM, EMPLOYE.PRENOM,
AFF_EMP_CLASS.CODE_CLASSEMENT, BANQUE_VACANCE.VALEUR, SALAIRE.TAUX_HORAIRE
FROM (((EMPLOYE INNER JOIN AFF_EMP_CLASS ON EMPLOYE.NO_EMPLOYE=AFF_EMP_CLASS.NO_EMPLOYE)
INNER JOIN BANQUE_VACANCE ON EMPLOYE.NO_EMPLOYE=BANQUE_VACANCE.NO_EMPLOYE)
INNER JOIN CONTRAT ON EMPLOYE.NO_EMPLOYE=CONTRAT.NO_EMPLOYE)
INNER JOIN SALAIRE ON EMPLOYE.NO_EMPLOYE=SALAIRE.NO_EMPLOYE
WHERE ([DATE_JOUR] BETWEEN (AFF_EMP_CLASS.DATE_DEBUT) AND NZ(AFF_EMP_CLASS.DATE_FIN,#01/01/9999#))
AND ([DATE_JOUR] BETWEEN (CONTRAT.DATE_DEBUT) AND NZ(CONTRAT.DATE_FIN,#01/01/9999#))
AND ([DATE_JOUR] BETWEEN (SALAIRE.DATE_DEBUT) AND NZ(SALAIRE.DATE_FIN,#01/01/9999#))
AND ([DATE_JOUR] BETWEEN (BANQUE_VACANCE.DATE_DEBUT) AND NZ(BANQUE_VACANCE.DATE_FIN,#01/01/9999#))
AND ((EMPLOYE.NO_EMPLOYE)=[NO_DE_EMPLOYE]);
C,est que dans ma bd jai un contrat et datedebut = ex : 2007-02-02 et la dateFin = null car son contrat n'a pas de date de fin de spécifier dont lorsque je fait mon select et que j'ai pas de date de fin il fait between 2007-02-02 et null donc il retourne rien mais si par exemple je reusiss a changer le null pour ma requette bin sa va faire between 2007-02-02 et 9999-01-01 et il va me resortir le contrat actuel.