Différence de jour entre deux date dans une requete SQL

Signaler
-
Messages postés
29268
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 août 2020
-
Bonjour,
j'ai des noms de fichiers avec un champs DATE nommé finFichier qui définit la date d'expiration du fichier et je voudrais faire une requête pour ressortir par exemple les fichiers qui expire dans les 30 jours.Donc dans ma requête je veux comparer ma date finFichier à la date du jour.
Voici ma requête qui ne fonctionne pas, j'ai l'impression que ça me prend uniquement le < ou > mais pas le chiffre qui correspond au nombre de jour.
SELECT * FROM fichier WHERE (TO_DAYS(finFichier) - TO_DAYS(Now()) >30)

Merci d'avance

4 réponses

Messages postés
14694
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 août 2020
144
Quel SGBDR utilises-tu ?
Messages postés
29268
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 août 2020
335
Bonjour,

En fonction de ton SGBD il peut y avoir différentes fonctions/méthodes pour y parvenir:
Par exemple : (pour sql server)
http://www.w3schools.com/sql/func_datediff.asp


Mais comme tu utilises la fonction TO_DAYS je pense que tu es en Mysql...
Déjà.. pour savoir ce que te retourne cette fonction (et voir si tu obtiens bien le résultat escompté pour y faire ton where...) tu peux la placer dans ton SELECT.
SELECT  = (TO_DAYS(finFichier) - TO_DAYS(Now()) ) as diffDate
                ,F.* 
FROM fichier F


Bien entendu... ta colonne de date est de format : DATETIME ... ?


Bonjour,

en effet je suis bien en Mysql.
Avec la requête
SELECT (TO_DAYS(finFichier) - TO_DAYS(Now()) ) as diffDate FROM fichier

j'obtiens bien un chiffre qui correspond a la différence entre la date du jour et la date d'expiration de mon fichier donc la fonction SQL TO_DAYS() - TO_DAYS() doit correctement fonctionner.
Par contre j'avais simplifié ma requête pour la poster mais je pense que j'ai un problème dans l'organisation de mes clauses WHERE.
Voici a quoi ça ressemble :
SELECT * FROM fichier 
WHERE id_Ged=$idged AND 
(nomFichier LIKE '%$phrase%' OR fichier.idFichier IN (SELECT idFichier FROM fichier_motcle WHERE motcle LIKE '%$phrase%')) AND
fichier.idFichier IN (SELECT idFichier FROM fichier_theme WHERE fichier_theme.idTheme=$theme) AND
(TO_DAYS(finFichier) - TO_DAYS(Now()) ) >=30 
ORDER BY nomFichier ASC


Merci pour votre aide.
Pour info, sans la clause de différence de date ma requête fonctionne correctement.
Merci
Messages postés
29268
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 août 2020
335
Tu peux tester la requête suivante :

SELECT (TO_DAYS(finFichier) - TO_DAYS(Now()) ) as Delta
        ,F.*
	,fm.*
	,ft.*
FROM fichier F
LEFT JOIN fichier_motcle fm ON (F.idFichier = fm.idFichier AND fm.motcle LIKE '%$phrase%')
LEFT JOIN fichier_theme ft ON (F.idFichier = ft.idFichier AND  ft.idTheme ='$theme')
WHERE id_Ged=$idged 


Regarde si dans la colonne Delta... tu as des valeurs supérieux ou égales à 30
Si oui... ajoute le AND

AND (TO_DAYS(finFichier) - TO_DAYS(Now()) ) >=30 



Messages postés
29268
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 août 2020
335
Tu peux aussi reprendre ta requête initiale et faire le même test :
SELECT (TO_DAYS(finFichier) - TO_DAYS(Now()) ) as Delta 
        ,F.* 
FROM fichier F 
WHERE id_Ged=$idged 
AND (nomFichier LIKE '%$phrase%' 
		OR fichier.idFichier IN (SELECT idFichier FROM fichier_motcle WHERE motcle LIKE '%$phrase%')) 
AND fichier.idFichier IN (SELECT idFichier FROM fichier_theme WHERE fichier_theme.idTheme=$theme) 
ORDER BY nomFichier ASC


.... obtiens tu des choses dans la colonne Delta ?? (supérieur ou égal à 30 ? )