Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
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 23/09/2006, 10h38   #1
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
Par défaut comparaison de date

Bonjour,

J'ai un problème et malgré des recherches sur le net je tourne en rond.

Je dois comparer deux dates avec celle renvoyée par l'instruction SELECT CURRENT_DATE qui me renvoie la date au format '23/09/2006' mais l'une des deux dates à comparer est au format '23/09/2006 10:23:57'

J'essaie donc d'adapter cette date pour ne récuper dans ma requete sql que le jour/mois/année mais je ne trouve pas de fonctions adéquats.

Merci pour votre aide.
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2006, 15h04   #2
Membre confirmé
 
Homme
Inscription : janvier 2006
Messages : 227
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Corse (Corse)

Informations forums :
Inscription : janvier 2006
Messages : 227
Points : 239
Points : 239
bonjour tu peux essayer la fonction date_trunc()

date_trunc('day', timestamp '23/09/2006 10:23:57')
donne une precision au jour donc tu pourra la comparer avec la date '23/09/2006'
xavier-Pierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2006, 16h29   #3
Membre chevronné
 
Avatar de Spoutnik
 
Homme
Inscription : octobre 2003
Messages : 668
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Etats-Unis

Informations forums :
Inscription : octobre 2003
Messages : 668
Points : 746
Points : 746
Hello,

CURRENT_DATE renvoit un résultat de type 'DATE', alors que '23/09/2006 10:23:57' est de type 'timestamp'. Il faut que tu caste un type vers l'autre.
Soit tu utilises CURRENT_TIMESTAMP (équivalent à now() ), soit tu cast '23/09/2006 10:23:57' en DATE (à vérifier, mais '23/09/2006 10:23:57'::date devrait marcher)

++
__________________
Two beer or not two beer. (Shakesbeer)
Question technique par MP => poubelle!
Spoutnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 08h51   #4
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
Merci !

Effectivement '23/09/2006 10:23:57'::date donne '23/09/2006'

merci pour vos réponses...
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 09h27   #5
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
mais comment puis-je ne récupérer que le jour et le mois dans la date afin de mettre à jour des ages ?

merci
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 10h04   #6
Membre chevronné
 
Avatar de Spoutnik
 
Homme
Inscription : octobre 2003
Messages : 668
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Etats-Unis

Informations forums :
Inscription : octobre 2003
Messages : 668
Points : 746
Points : 746
Hello,

Pour récupérer le jour, utilises

Code :
date_part('day',timestamp '23/09/2006 10:23:57')
ou
Code :
extract('day' FROM timestamp '23/09/2006 10:23:57')

Pour le détails de toutes les fonctions sur les dates/timestamp regarde cette page :
Operations sur les dates

++
__________________
Two beer or not two beer. (Shakesbeer)
Question technique par MP => poubelle!
Spoutnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 10h10   #7
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
Oui tu vas récupérer le jour mais moi j'ai besoin de comparer le jour et le mois dans deux dates afin de mettre à jour une colonne age. Je dois en fait vérifier la date de leur anniversaire et incrémenter leur age.
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 10h13   #8
Membre chevronné
 
Avatar de Spoutnik
 
Homme
Inscription : octobre 2003
Messages : 668
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Etats-Unis

Informations forums :
Inscription : octobre 2003
Messages : 668
Points : 746
Points : 746
la fonction age(timestamp, timestamp) ?
ou pour avoir l'age en année :

Citation:
extract ('year' from age('date à comparer'::timestamp, 'date naissance' :: timestamp))
__________________
Two beer or not two beer. (Shakesbeer)
Question technique par MP => poubelle!
Spoutnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 10h23   #9
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
Oui je suis d'accord mais il faut bien sélectionnner les personnes dont c'est l'anniversaire aujourd'hui. Je ne vais pas faire une mise à jour pour tout le monde donc il ma faut sélectionner les membres dont l'anniversaire est aujourd'hui et cela se fait avec le jour et le mois de leur date de naissance
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 10h30   #10
Membre chevronné
 
Avatar de Spoutnik
 
Homme
Inscription : octobre 2003
Messages : 668
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Etats-Unis

Informations forums :
Inscription : octobre 2003
Messages : 668
Points : 746
Points : 746
pas forcément. Si tu veux sélectionner les personnes dont c'est l'anniversaire aujourdh'ui, tu peux utiliser ceci par exemple :
Citation:
SELECT *
FROM personne
WHERE age('date naissance'::timestamp) = date_truc('year' age('date naissance'::timestamp))
si l'arrondi vaut la même chose que la valeur exacte d'écart, c'est que c'est la date anniversaire!
__________________
Two beer or not two beer. (Shakesbeer)
Question technique par MP => poubelle!
Spoutnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 11h07   #11
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
Merci et bravo !
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2006, 11h11   #12
Membre chevronné
 
Avatar de Spoutnik
 
Homme
Inscription : octobre 2003
Messages : 668
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Etats-Unis

Informations forums :
Inscription : octobre 2003
Messages : 668
Points : 746
Points : 746
De rien!
un petit et ce sera parfait
__________________
Two beer or not two beer. (Shakesbeer)
Question technique par MP => poubelle!
Spoutnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h04.


 
 
 
 
Partenaires

Hébergement Web