Différence de jour entre deux date dans une requete SQL
ricky
-
27 août 2014 à 11:54
jordane45
Messages postés38241Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention17 septembre 2024
-
29 août 2014 à 12:01
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
A voir également:
Différence entre deux dates sql oracle
Sql différence entre 2 dates - Meilleures réponses
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 ... ?
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
jordane45
Messages postés38241Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention17 septembre 2024345 29 août 2014 à 11:59
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
jordane45
Messages postés38241Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention17 septembre 2024345 29 août 2014 à 12:01
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 ? )