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 :

Comparaison entre dates


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2006
    Messages : 250
    Points : 99
    Points
    99
    Par défaut Comparaison entre dates
    Bonjour voici ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $init ='SELECT PERS.NOM_ ,PERS.PRENOM_ , SAL.MATRICULE_ , AFC1.TEXTE_  as TEXTE1, AFC2.TEXTE_ as TEXTE2 , CAL.DATE_FIN_'
    	 . ' FROM  '.$Table_pers.' PERS , '.$Table_sal.' SAL , '.$Table_affec.' AFC1, '.$Table_affec.' AFC2 , '.$Table_cal.' CAL'
    	 . ' WHERE  PERS.PERSONNE_ = SAL.PERSONNE_'
    	 . ' AND PERS.PERSONNE_ = AFC1.SALARIE_ '
    	 . ' AND PERS.PERSONNE_ = AFC2.SALARIE_ '
    	 . ' AND AFC1.TITRE_ZONE_="2" '
    	 . ' AND AFC2.TITRE_ZONE_="3" '
    	 . ' AND SAL.PERSONNE_ = CAL.SALARIE_'
    	 . ' AND CAL.DATE_FIN_ = NULL'
    	 . ' AND CAL.DATE_FIN_ < CURENT_DATE'
    	 . ' ORDER BY PERS.NOM_,PERS.PRENOM_;';
    J'ai un souci avec cette portion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    . ' AND CAL.DATE_FIN_ < CURENT_DATE'
    Il me retourne une erreur qui semble logique car :
    -Cette fonction n'existe pas en MSSQL (je crois = http://sqlpro.developpez.com/cours/sqlaz/fonctions/)
    - LA date que j'exploite et de type date : DD/MM/YYYY
    Commment je peut faire la comparaison avec la date d'aujourdh'ui de telle manière que j'ai tout ce qui antérieur à aujourd'hui.
    Je sais que sous Oracle c'est date < sysdate .Mais en MSSQL

    Merci pour votre réponse .

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 58
    Points
    58
    Par défaut
    La date systeme se récupère comme suit sous SQL Server:


  3. #3
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2006
    Messages : 250
    Points : 99
    Points
    99
    Par défaut
    Le mieu est de creer une fonction php qui me retourne la date courante formatée en francais et l'utiliser dans ma requete ?

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2006
    Messages : 250
    Points : 99
    Points
    99
    Par défaut
    Je fiouille sur internet sans trop de resultat j'ai l'erreur suivante :
    Warning: mssql_query() [function.mssql-query]: message: 'CURDATE' is not a recognized function name. (severity 15) in /home/httpd/dev/badges/search.php on line 143
    Que dois-je faire et sourtout comment faire la comparasion de date dans mon cas ?

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut comparaison de date.
    je compare le jour, le mois et l'annee.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'SELECT PERS.NOM_ ,PERS.PRENOM_ , SAL.MATRICULE_ , AFC1.TEXTE_  as TEXTE1, AFC2.TEXTE_ as TEXTE2 , CAL.DATE_FIN_'
    	 . ' FROM  '.$Table_pers.' PERS , '.$Table_sal.' SAL , '.$Table_affec.' AFC1, '.$Table_affec.' AFC2 , '.$Table_cal.' CAL'
    	 . ' WHERE  PERS.PERSONNE_ = SAL.PERSONNE_'
    	 . ' AND PERS.PERSONNE_ = AFC1.SALARIE_ '
    	 . ' AND PERS.PERSONNE_ = AFC2.SALARIE_ '
    	 . ' AND AFC1.TITRE_ZONE_="2" '
    	 . ' AND AFC2.TITRE_ZONE_="3" '
    	 . ' AND SAL.PERSONNE_ = CAL.SALARIE_'
    . ' AND DAY(CAL.DATE_FIN_) < DAY(GETDATE())'
    . ' AND MONTH(CAL.DATE_FIN_) < MONTH(GETDATE())'
    . ' AND YEAR(CAL.DATE_FIN_) < YEAR(GETDATE())'
      . ' ORDER BY PERS.NOM_,PERS.PRENOM_;'

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Il y a la possibilité d'utiliser la fonction DATEDIFF
    Cette fonction fait la différence entre deux champ datetime.
    Il faut indiquer le partie de la date sur laquelle on fait la différence : jour,mois,année,seconde,minutes
    Ensuite une date de début et une date de fin.
    La fonction renvoie un entier ou un float positif ou négatif.
    Positif : date de début < date de fin
    Négatif : date de début > date de fin

    Tu pourras ensuite manipuler le résultat à ta guise.

  7. #7
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2006
    Messages : 250
    Points : 99
    Points
    99
    Par défaut
    Bonjour ,
    Merci pour ces réponses mais la requete ne me retourne plus rien du coup (l'erreur est partie ) .
    Le format de DATE_FIN_ est datetime est ce que le fait que ce soit ce format ne pose pas de probleme ?

    La fonction datediff sert a retouner une valeur or dans mon cas je ne veut pas de valeur mais simplement que les items avant la date d'aujourd'hui soit affichés.

    PS: Je ne peut rien modifier dans la base dans la mesure ou je n'ai les droits qu'en lecture .

    Merci.

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    ce n'est pas evident, je ne peux pas tester sur mon poste , j'ai supprime la ligne date = null qui n'était pas à sa place... essaye cela ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    'SELECT PERS.NOM_ ,PERS.PRENOM_ , SAL.MATRICULE_ , AFC1.TEXTE_ as TEXTE1, AFC2.TEXTE_ as TEXTE2 , CAL.DATE_FIN_' . ' FROM '.$Table_pers.' PERS , '.$Table_sal.' SAL , '.$Table_affec.' AFC1, '.$Table_affec.' AFC2 , '.$Table_cal.' CAL' . ' WHERE PERS.PERSONNE_ = SAL.PERSONNE_' . ' AND PERS.PERSONNE_ = AFC1.SALARIE_ ' . ' AND PERS.PERSONNE_ = AFC2.SALARIE_ ' . ' AND AFC1.TITRE_ZONE_="2" ' . ' AND AFC2.TITRE_ZONE_="3" ' . ' AND SAL.PERSONNE_ = CAL.SALARIE_' . ' AND CAL.DATE_FIN_ < GETDATE()' . ' ORDER BY PERS.NOM_,PERS.PRENOM_;'

  9. #9
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2006
    Messages : 250
    Points : 99
    Points
    99
    Par défaut
    Re,
    En effet je retourne quelque chose qui s'apporche de ce que je veut , je vais reprendre du début :

    j'ai 5 tables :
    PERSONNE
    PERSONNE_ (id) NOM_ PRENOM_

    SALARIE
    PERSONNE_(id) SALARIE_

    AFFECTATION_INFORMATION_PARAME
    SALARIE_(id), TITRE_ZONE1 , TITRE_ZONE1

    CALENDRIER_CONTRAT
    SALARIE_(id), DATE_DEBUT,DATE_FIN_,

    SALARIE
    PERSONNE_(id) MATRICULE_

    Considerons la date fin de la table CALENDRIER_CONTRAT:
    Elle est renseignée de la manière suivante
    - Peut être nulle
    - Elle est renseignée pour les gents qui on un CDD (contrat....)
    - Elle est vide pour les CDI
    - Elle est renseignée pour les gents en retraite (qu'on doit tout de meme garder dans la base )

    Je veut afficher les gents qui :
    on soit une date nulle
    soit une date > la date d'aujourd'hui
    *autrement dit un CDD qui ne part qu'en 2008 devra être affiché.
    *Un CDI aussi
    * Mais un CDI qui a une valeur inferieur a la date d'aujourdhui on ne s'en occupe pas

    Même moi je m'embrouile

    J'ai penser à un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    . ' AND (CAL.DATE_FIN_ = NULL) | (CAL.DATE_FIN_ >  GETDATE())'
    Mais ca mouline encore et encore !!!

  10. #10
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2006
    Messages : 250
    Points : 99
    Points
    99
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $init ='SELECT PERS.NOM_ , PERS.PRENOM_ , SAL.MATRICULE_ , AFC1.TEXTE_  as TEXTE1, AFC2.TEXTE_ as TEXTE2'
    	 . ' FROM  '.$Table_pers.' PERS , '.$Table_sal.' SAL , '.$Table_affec.' AFC1, '.$Table_affec.' AFC2 , '.$Table_cal.' CAL'
    	 . ' WHERE  PERS.PERSONNE_ = SAL.PERSONNE_'
    	 . ' AND PERS.PERSONNE_ = AFC1.SALARIE_ '
    	 . ' AND PERS.PERSONNE_ = AFC2.SALARIE_ '
    	 . ' AND AFC1.TITRE_ZONE_="2" '
    	 . ' AND AFC2.TITRE_ZONE_="3" '
    	 . ' AND SAL.PERSONNE_ = CAL.SALARIE_'
    	// . ' AND (CAL.DATE_FIN_ = NULL) 
    	// . ' AND (CAL.DATE_FIN_ >  GETDATE())'
    	 . ' ORDER BY PERS.NOM_,PERS.PRENOM_;';
    Explication mon code tourne et me renvoit les bons resultats quand je fait la requete en enlevant les commentaire maintenant je veut enlever es commentaire et faire un OU mais je ne trouve pas la syntaxe...

  11. #11
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2006
    Messages : 250
    Points : 99
    Points
    99
    Par défaut
    Voila j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    . ' AND (CAL.DATE_FIN_ is NULL OR CAL.DATE_FIN_ > GETDATE())'
    . ' ORDER BY PERS.NOM_,PERS.PRENOM_	;';
    Merci a tous ceux qui m'on apporté un soutient .

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

Discussions similaires

  1. Comparaison entre dates
    Par madina dans le forum Requêtes
    Réponses: 4
    Dernier message: 08/07/2011, 13h48
  2. Comparaison entre date et exercice
    Par gentilman_delphi dans le forum Débuter
    Réponses: 5
    Dernier message: 22/03/2008, 14h29
  3. [Date] comparaison entre dates
    Par *alexandre* dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 03/11/2006, 11h17
  4. Réponses: 6
    Dernier message: 18/04/2006, 13h11
  5. [Dates] Comparaison de date entre deux IP (anti-flood)
    Par psychoBob dans le forum Langage
    Réponses: 79
    Dernier message: 23/12/2005, 17h19

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