Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 18/07/2008, 11h10   #1
Membre habitué
 
Inscription : juillet 2006
Messages : 208
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 208
Points : 135
Points : 135
Par défaut [SQL] + comparaison de 2 dates

Bonjour,

J'ai un peu du mal.
J'aimerai comparer 2 dates dans ma requête:
ma date = "30/06/2008 06:00:00"
avec la SYSDATE

Mais savoir si elle sont égales sans comparer avec l'heure.
Comment dois-je faire? Merci.
__________________
Tox
toxycyty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2008, 11h15   #2
Membre habitué
 
Inscription : juillet 2006
Messages : 208
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 208
Points : 135
Points : 135
Re,
Je crois avoir trouve la solution :

Code :
1
2
 
AND TO_DATE(myDate, 'dd/mm/yyyy') = TO_DATE(SYSDATE, 'dd/mm/yyyy')
__________________
Tox
toxycyty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2008, 11h27   #3
Membre confirmé
 
Inscription : janvier 2006
Messages : 178
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : janvier 2006
Messages : 178
Points : 208
Points : 208
Ou bien (je préfère personnellement car on conserve des dates) :

Code :
AND TRUNC(myDate) = TRUNC(SYSDATE)
rbaraer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2008, 12h18   #4
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Citation:
TO_DATE(SYSDATE

Jamais de to_date sur une date. Un to_date transforme une chaine de caractère en date, c'est sa seule fonction.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2008, 13h53   #5
Membre confirmé
 
Inscription : janvier 2006
Messages : 178
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : janvier 2006
Messages : 178
Points : 208
Points : 208
Citation:
Envoyé par McM Voir le message

Jamais de to_date sur une date. Un to_date transforme une chaine de caractère en date, c'est sa seule fonction.
Bien vu, cela m'avait échappé. J'étais persuadé d'avoir vu un TO_CHAR, d'où ma remarque "car on conserve des dates" :p

Effectivement le code auquel je pensais est :

Code :
AND TO_CHAR(myDate, 'dd/mm/yyyy') = TO_CHAR(SYSDATE, 'dd/mm/yyyy')
Mais encore une fois je préfère TRUNC .

Toxycyty, ton code original est à proscrire car voici ce qui se passe :

- conversion des champs DATE en chaine avec le format de date de la session (fonction des paramètres NLS, non maitrisé)

- conversion des chaines en date avec le format voulu : 'dd/mm/yyyy', mais rien ne garantit que la conversion implicite précédente a utilisé ce format !

HTH
rbaraer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2008, 14h00   #6
Membre habitué
 
Inscription : juillet 2006
Messages : 208
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 208
Points : 135
Points : 135
Salut,

C'est note, merci pour l'info.
A+
__________________
Tox
toxycyty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2008, 17h37   #7
Membre du Club
 
Inscription : décembre 2006
Messages : 119
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 119
Points : 61
Points : 61
Attention !!! On perd l'usage de tout index basé sur la colonne mydate dès que l'on fait une opération dessus dans le WHERE. C'est le cas avec votre formule.

Pour éviter ça il faut plutôt faire l'encadrement :

Code :
1
2
3
 
AND myDate >= TRUNC(SYSDATE)
AND myDate < TRUNC(SYSDATE) +1
Cdlt.
__________________
La différence entre la théorie et la pratique, c'est qu'en théorie il n'y a pas de différence entre la théorie et la pratique. En pratique, si.
pat29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2008, 20h55   #8
Membre confirmé
 
Inscription : janvier 2006
Messages : 178
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : janvier 2006
Messages : 178
Points : 208
Points : 208
Citation:
Envoyé par pat29 Voir le message
Attention !!! On perd l'usage de tout index basé sur la colonne mydate dès que l'on fait une opération dessus dans le WHERE. C'est le cas avec votre formule.

Pour éviter ça il faut plutôt faire l'encadrement :

Code :
1
2
3
 
AND myDate >= TRUNC(SYSDATE)
AND myDate < TRUNC(SYSDATE) +1
Cdlt.
Effectivement, ce n'est pas toujours utile mais c'est un bon réflexe à prendre, tu as raison.
rbaraer 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 21h42.


 
 
 
 
Partenaires

Hébergement Web