Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels 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 29/08/2007, 16h23   #1
Invité régulier
 
Inscription : novembre 2004
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 17
Points : 6
Points : 6
Par défaut Sélectionner un intervalle de champs de type DATE

Bonjour,

Sous Oracle, je cherche à récupérer des dates comprises entre la date du jour et il y a un mois. Voici un aperçu de la table sur laquelle je travaille, rien d'extraordinaire :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
SELECT sdate FROM matable;
SDATE
--------
26/07/07
16/08/07
17/08/07
17/08/07
10/08/07
20/08/07
20/08/07
28/08/07
30/08/07
12/06/07
14/08/07
Ensuite, voilà la requête qui me pose problème :

Code :
1
2
3
4
5
6
7
 
SELECT sdate
FROM matable
WHERE trunc(sdate, 'DD') < trunc(SYSDATE, 'DD') AND trunc(sdate, 'DD') >= trunc(add_months(SYSDATE, -1),'DD');
 
 
aucune ligne sélectionnée

En cherchant je suis tombé sur ce topic, et je me suis inspiré de la fonction TRUNC... Mais même sans utiliser TRUNC, ça ne marche pas.

Qu'est-ce qui cloche avec ma requête ??
tyrant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 16h53   #2
Membre actif
 
Avatar de Loyd1974
 
Inscription : août 2007
Messages : 176
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 176
Points : 172
Points : 172
J'ai recopié ton exemple, il marche avec moi :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
WITH matable AS (
SELECT to_date('260707','ddmmyy') AS sdate FROM dual
UNION ALL
SELECT to_date('160807','ddmmyy') AS sdate FROM dual
UNION ALL
SELECT to_date('170807','ddmmyy') AS sdate FROM dual
UNION ALL
SELECT to_date('170807','ddmmyy') AS sdate FROM dual
UNION ALL
SELECT to_date('100807','ddmmyy') AS sdate FROM dual
UNION ALL
SELECT to_date('200807','ddmmyy') AS sdate FROM dual
UNION ALL
SELECT to_date('200807','ddmmyy') AS sdate FROM dual
UNION ALL
SELECT to_date('280807','ddmmyy') AS sdate FROM dual
UNION ALL
SELECT to_date('300807','ddmmyy') AS sdate FROM dual
UNION ALL
SELECT to_date('120607','ddmmyy') AS sdate FROM dual
UNION ALL
SELECT to_date('140807','ddmmyy') AS sdate FROM dual)
SELECT sdate
FROM matable
WHERE trunc(sdate, 'DD') < trunc(SYSDATE, 'dd') 
AND trunc(sdate, 'dd') >= trunc(add_months(SYSDATE, -1),'DD')
 
16/08/2007
17/08/2007
17/08/2007
10/08/2007
20/08/2007
20/08/2007
28/08/2007
14/08/2007
Peut-être une faute de frappe ?
Loyd1974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 17h07   #3
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Il faut utiliser
TRUNC(ladate) pour s'affranchir de l'heure
Et cela suffit !
Ne pas utiliser de format dans ce cas !
Attention à l'ordre des dates dans le between !

Le plus simple
Code :
1
2
3
4
 
SELECT madate FROM matable
WHERE 
MONTHS_BETWEEN(trunc(madate),trunc(sysdate)) BETWEEN -1 AND 0
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 17h09   #4
Membre éprouvé
 
Avatar de AL1986
 
Inscription : juillet 2007
Messages : 434
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juillet 2007
Messages : 434
Points : 401
Points : 401
As-tu essayé cette syntaxe :
Code SQL :
....WHERE (tadate <= CURRENT_DATE) AND (tadate >= (CURRENT_DATE - INTERVAL 31 DAY))...
ou bien :
Code SQL :
....WHERE (tadate <= CURRENT_DATE) AND (tadate >= (CURRENT_DATE - INTERVAL 1 MONTH))...
__________________
Citation:
Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
There is no cure for stupidity (ou pas ).
AL1986 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 17h47   #5
Invité régulier
 
Inscription : novembre 2004
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 17
Points : 6
Points : 6
Bonjour,

Bon vous me faites un peu peur là... Ca marche donc chez vous, sauf chez moi ?? En ce qui me concerne, je tourne sous Oracle9i EE 9.2.0.1.0

Alors...

Loyd1974 : ta méthode me renvoie la même chose que toi, même si j'ai pas tout compris lol

Garuda : j'ai essayé ta requête, assez compacte (j'aime), mais elle ne me renvoit aucune ligne.

AL1986 : J'ai une erreur "ORA-00907: Parenthèse de droite absente"


Je pense pas avoir fait d'erreur de syntaxe, sinon Oracle m'aurait alerté non ?

Merci de votre aide
tyrant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 17h51   #6
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Citation:
Garuda : j'ai essayé ta requête, assez compacte (j'aime), mais elle ne me renvoie aucune ligne.
essaye pour voir
Code :
1
2
3
SELECT madate,MONTHS_BETWEEN(trunc(madate),trunc(sysdate))
 FROM matable
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 18h02   #7
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Et pour verifier l'année (je flaire le pb de format)
Code :
1
2
 
SELECT to_char(madate,'DD/MM/YYYY') FROM matable
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 18h15   #8
Invité régulier
 
Inscription : novembre 2004
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 17
Points : 6
Points : 6
Citation:
Envoyé par Garuda Voir le message
essaye pour voir
Code :
1
2
3
SELECT madate,MONTHS_BETWEEN(trunc(madate),trunc(sysdate))
 FROM matable
Ca donne ça
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SDATE    MONTHS_BETWEEN(TRUNC(SDATE),TRUNC(SYSDATE))
-------- -------------------------------------------
26/07/07                                  -24001,097
16/08/07                                  -24000,419
17/08/07                                  -24000,387
17/08/07                                  -24000,387
10/08/07                                  -24000,613
20/08/07                                   -24000,29
20/08/07                                   -24000,29
28/08/07                                  -24000,032
30/08/07                                  -23999,968
12/06/07                                  -24002,548
14/08/07                                  -24000,484
 
11 ligne(s) sélectionnée(s).


Citation:
Envoyé par Garuda Voir le message
Et pour verifier l'année (je flaire le pb de format)
Code :
1
2
 
SELECT to_char(madate,'DD/MM/YYYY') FROM matable
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TO_CHAR(SD
----------
26/07/0007
16/08/0007
17/08/0007
17/08/0007
10/08/0007
20/08/0007
20/08/0007
28/08/0007
30/08/0007
12/06/0007
14/08/0007
 
11 ligne(s) sélectionnée(s).

Je crois que tu as du flair, pourquoi c'est daté de l'an 7 ?!
tyrant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 18h18   #9
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Citation:
Je crois que tu as du flair, pourquoi c'est daté de l'an 7 ?!
Ca, il faut demander a ceux qui ont developpé l'appli !
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 18h31   #10
Invité régulier
 
Inscription : novembre 2004
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 17
Points : 6
Points : 6
Tu pense que c'est la fonction "to_char" qui est fautive ou bien que l'erreur est directement au niveau de la colonne "sdate" de type DATE ?
tyrant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 18h33   #11
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
la date est fausse DANS LA BASE !
Il faut
- corriger les données pour les mettre à la bonne année (2007)
Code :
1
2
 
UPDATE matable SET sdate=ADD_MONTHS(sdate,2000*12);
- corriger le prog qui alimente la colonne pour qu'il donne la bonne année (2007)
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 18h42   #12
Invité régulier
 
Inscription : novembre 2004
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 17
Points : 6
Points : 6
Effectivement,

c'est ce qu'on appelle une erreur entre le clavier et la chaise


Désolé du dérangement, et merci pour vos tuyaux


A+
tyrant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 18h43   #13
Membre éprouvé
 
Avatar de AL1986
 
Inscription : juillet 2007
Messages : 434
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juillet 2007
Messages : 434
Points : 401
Points : 401
Citation:
Envoyé par tyrant Voir le message
AL1986 : J'ai une erreur "ORA-00907: Parenthèse de droite absente"
Désolé, j'ai commis une petite erreur, j'ai oublié les '' autour de 31
Là ça devrait marcher (même sans parenthèses)
Code SQL :
1
2
3
4
SELECT madate 
FROM matable
WHERE madate <= CURRENT_DATE
AND madate >= CURRENT_DATE - INTERVAL '31' DAY
__________________
Citation:
Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
There is no cure for stupidity (ou pas ).
AL1986 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h02.


 
 
 
 
Partenaires

Hébergement Web