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 15/02/2008, 10h57   #1
Candidat au titre de Membre du Club
 
Inscription : août 2005
Messages : 75
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 75
Points : 11
Points : 11
Par défaut between sur 2 dates

Bonjour je fais deux requetes sql de recherche dans une base entre deux dates, mais suivant le format dans lequel j'écris les dates je n'ai pas les mêmes réponses:

La premiere me donne un resultat correct, c'est a dire la journée du 14/02/2008 et du 15/02/2008,
mais la deuxieme requete me donne le même resultat mais avec en plus la journee du 15/01/2008 !!!

1er requete:
Code :
1
2
3
4
5
SELECT to_char(datetat,'YYYYMMDD') AS resultdate, count(produit) AS result
FROM ligclts
WHERE qtlivr > 0 AND numcde LIKE 'C80%' AND to_char(datetat,'YYYYMMDD') BETWEEN '20080214' AND '20080215' 
GROUP BY to_char(datetat,'YYYYMMDD')
ORDER BY to_char(datetat,'YYYYMMDD') ASC

2eme requete:
Code :
1
2
3
4
5
SELECT to_char(datetat,'DD/MM/YYYY') AS resultdate, count(produit) AS result
FROM ligclts
WHERE qtlivr > 0 AND numcde LIKE 'C80%' AND to_char(datetat,'DD/MM/YYYY') BETWEEN '14/02/2008' AND '15/02/2008'
GROUP BY to_char(datetat,'DD/MM/YYYY')
ORDER BY to_char(datetat,'DD/MM/YYYY') ASC


merci
cedlannoy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 11h06   #2
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
pourquoi comparer des dates en les convertissant en chaines ????

les comparaisons de dates en tant que dates marche très bien !
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 11h31   #3
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 319
Points : 5 837
Points : 5 837
C'est quoi le type de données de la zone "datetat" (desc de la table ligclts)?
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 12h44   #4
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 453
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 453
Points : 4 213
Points : 4 213
Code :
mais la deuxieme requete me donne le même resultat mais avec en plus la journee du 15/01/2008 !!!
Bien sur , c'est tout à fait normal :
'15/01/2008' < '16/01/2008' < '16ZZZ' < 'COUCOU'
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 15h21   #5
Candidat au titre de Membre du Club
 
Inscription : août 2005
Messages : 75
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 75
Points : 11
Points : 11
Par défaut suite ...

Mais si je fais to_date a la place d'un to_char, j'ai aucune ligne:
Le champ datetat est un champ date d'oracle

Code :
1
2
3
4
5
SELECT to_date(datetat,'DD/MM/YYYY') AS resultdate, count(produit) AS result
FROM ligclts
WHERE qtlivr > 0 AND numcde LIKE 'C80%' AND to_date(datetat,'DD/MM/YYYY') BETWEEN '14/02/2008' AND '15/02/2008'
GROUP BY to_date(datetat,'DD/MM/YYYY')
ORDER BY to_date(datetat,'DD/MM/YYYY') ASC
cedlannoy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 15h30   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
TO_DATE d'une colonne date ça n'a aucun sens

Essaye :
Code :
1
2
3
4
5
SELECT datetat AS resultdate, count(produit) AS result
FROM ligclts
WHERE qtlivr > 0 AND numcde LIKE 'C80%' AND to_date(datetat,'DD/MM/YYYY') BETWEEN to_date('14/02/2008','DD/MM/YYYY') AND to_date('15/02/2008','DD/MM/YYYY')
GROUP BY datetat
ORDER BY datetat ASC
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 15h32   #7
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 453
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 453
Points : 4 213
Points : 4 213
Encore une incompréhension entre DATE et FORMAT
Pas de TO_DATE sur une DATE
un FORMAT (genre DD/MM/YYYY) sert à transformer une date en une chaine de caractère avec un format pour l'utilisateur.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h13   #8
Candidat au titre de Membre du Club
 
Inscription : août 2005
Messages : 75
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 75
Points : 11
Points : 11
cela ne donne aucun resultat!
cedlannoy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h18   #9
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
t'es sûr qu'il y a des lignes au moins ?

que donne :
Code :
1
2
3
SELECT datetat
FROM ligclts
WHERE qtlivr > 0 AND numcde LIKE 'C80%'
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h26   #10
Candidat au titre de Membre du Club
 
Inscription : août 2005
Messages : 75
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 75
Points : 11
Points : 11
oui il y a bien des lignes!
La première version de la requete sql me donne 2 lignes de résultat.

Merci
cedlannoy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h30   #11
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
c'est trop demandé que d'avoir le résultat ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h33   #12
Candidat au titre de Membre du Club
 
Inscription : août 2005
Messages : 75
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 75
Points : 11
Points : 11
Resultat de la premiere requete avec les dates en YYYYMMDD:
20080214 5836
20080215 5539
Resultat de la deuxieme requeteavec les dates en DD/MM/YYYY:
14/02/2008 5836
15/01/2008 5483
15/02/2008 5539
cedlannoy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h39   #13
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
et ça :
Code :
1
2
3
4
5
SELECT datetat AS resultdate, count(produit) AS result
FROM ligclts
WHERE qtlivr > 0 AND numcde LIKE 'C80%' AND datetat BETWEEN to_date('14/02/2008','DD/MM/YYYY') AND to_date('15/02/2008','DD/MM/YYYY')
GROUP BY datetat
ORDER BY datetat ASC
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h43   #14
Candidat au titre de Membre du Club
 
Inscription : août 2005
Messages : 75
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 75
Points : 11
Points : 11
cela me donne toute les lignes!
cedlannoy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 16h50   #15
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
j'avais omis de remplacer un to_date(datetat)... tu pourrais quand même faire l'effort de réfléchir
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 17h01   #16
Candidat au titre de Membre du Club
 
Inscription : août 2005
Messages : 75
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 75
Points : 11
Points : 11
Par défaut presque bon!

si je fais:

Code :
1
2
3
4
5
SELECT datetat AS resultdate, count(produit) AS result
FROM ligclts
WHERE qtlivr > 0 AND numcde LIKE 'C80%' AND to_date(datetat) BETWEEN to_date('14/02/2008','DD/MM/YYYY') AND to_date('15/02/2008','DD/MM/YYYY')
GROUP BY datetat
ORDER BY datetat ASC
il me donne toutes les lignes, par contre avec :

Code :
1
2
3
4
5
SELECT to_date(datetat,'DD/MM/YYYY') AS resultdate, count(produit) AS result
FROM ligclts
WHERE qtlivr > 0 AND numcde LIKE 'C80%' AND to_date(datetat) BETWEEN to_date('14/02/2008','DD/MM/YYYY') AND to_date('15/02/2008','DD/MM/YYYY')
GROUP BY to_date(datetat,'DD/MM/YYYY')
ORDER BY to_date(datetat,'DD/MM/YYYY')ASC
il me donne:
2008-02-14 00:00:00:0 5836
2008-02-15 00:00:00:0 5633

alors que je souhaites avoir les dates en resultat sous la forme : DD/MM/YYYY


ps: desole c'est juste mon deuxieme jour sous oracle!
cedlannoy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 17h03   #17
Candidat au titre de Membre du Club
 
Inscription : août 2005
Messages : 75
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 75
Points : 11
Points : 11
Par défaut correction!

c'est plutôt ceci ma derniere requete qui est presque bonne:

Code :
1
2
3
4
5
SELECT to_date(datetat) AS resultdate, count(produit) AS result
FROM ligclts
WHERE qtlivr > 0 AND numcde LIKE 'C80%' AND to_date(datetat) BETWEEN to_date('14/02/2008','DD/MM/YYYY') AND to_date('15/02/2008','DD/MM/YYYY')
GROUP BY to_date(datetat)
ORDER BY to_date(datetat) ASC
merci pour la patience!
cedlannoy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 17h12   #18
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
to_date(datetat) est erroné... j'sais pas comment faut te le dire... datestat est déjà une date, t'as pas besoin de faire une conversion d'une date en date
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 17h14   #19
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Citation:
Envoyé par cedlannoy Voir le message
alors que je souhaites avoir les dates en resultat sous la forme : DD/MM/YYYY
donc là c'est un TO_CHAR qu'il faut faire...

TO_DATE('14/02/2008') je convertis la chaine '14/02/2008' en date pour la comparer à une colonne date

TO_CHAR(datestat,'DD/MM/YYYY') je convertis une date en chaine de caractères avec le format voulu
orafrance 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 19h23.


 
 
 
 
Partenaires

Hébergement Web