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 28/04/2008, 14h46   #1
Membre du Club
 
Avatar de Sabact
 
Inscription : septembre 2006
Messages : 189
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 189
Points : 56
Points : 56
Envoyer un message via AIM à Sabact
Par défaut Deux requêtes presque semblables donnent deux résultats

Bonjour, j'ai deux requettes presque - simultide-- mais malhereusement j'aurai deux résultats distincts, si vous avez trouvé le moyen pour qu'on aie le même résultat soyez le bienvenue.
  1. Prémier code:
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
 
SQL> SELECT   DECODE (COUNT (regimerefinancement),
  2                   NULL, 0,
  3                   COUNT (regimerefinancement)
  4                  ) nbregime,
  5           regimerefinancement
  6      FROM (SELECT   cotation.identifiant_cot AS identifiant_cot,
  7                     cotation.numero_cot AS numero_cot,
  8                     cotation.regimerefinancement AS regimerefinancement,
  9                    cotation.date_validite AS date_validite,
 10                     cotation.visee AS visee, COUNT (*) AS comptage
 11                FROM cotation
 12               WHERE date_validite >= to_date(sysdate,'DD/MM/YYYY')
 13                 AND numero_cot IN (SELECT   MAX (numero_cot) numero
 14                                        FROM cotation
 15                                       WHERE visee = 1
 16                                    GROUP BY identifiant_cot)
 17            GROUP BY identifiant_cot,
 18                     numero_cot,
 19                     date_validite,
 20                     visee,
 21                     regimerefinancement
 22            ORDER BY comptage ASC)
 23  GROUP BY regimerefinancement
 24  ORDER BY regimerefinancement;
 
  NBREGIME RE                                                                   
---------- --                                                                   
       157 G                                                                    
       618 H                                                                    
      7164 N                                                                    
       726 P                                                                    
      1128 R                                                                    
       415 T                                                                    
 
6 ligne(s) sélectionnée(s).
  1. Deuxième code
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
 
SQL> SELECT   DECODE (COUNT (regimerefinancement),
  2                   NULL, 0,
  3                   COUNT (regimerefinancement)
  4                  ) nbregime,
  5           regimerefinancement
  6      FROM (SELECT   cotation.identifiant_cot AS identifiant_cot,
  7                     cotation.numero_cot AS numero_cot,
  8                     cotation.regimerefinancement AS regimerefinancement,
  9                    cotation.date_validite AS date_validite,
 10                     cotation.visee AS visee, COUNT (*) AS comptage
 11                FROM cotation
 12               WHERE date_validite >= to_date('28/02/2008','DD/MM/YYYY')
 13                 AND numero_cot IN (SELECT   MAX (numero_cot) numero
 14                                        FROM cotation
 15                                       WHERE visee = 1
 16                                    GROUP BY identifiant_cot)
 17            GROUP BY identifiant_cot,
 18                     numero_cot,
 19                     date_validite,
 20                     visee,
 21                     regimerefinancement
 22            ORDER BY comptage ASC)
 23  GROUP BY regimerefinancement
 24  ORDER BY regimerefinancement;
 
  NBREGIME RE                                                                   
---------- --                                                                   
        53 G                                                                    
       122 H                                                                    
      2637 N                                                                    
       211 P                                                                    
       290 R                                                                    
       102 T                                                                    
 
6 ligne(s) sélectionnée(s).
__________________
Un sot ne dit pas de choses intelligentes, mais un homme intelligent dit beaucoup de bêtises.
Sabact est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 14h51   #2
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
C'est sympa de nous filer du code.
C'est le jeu des 7 erreurs ?

Code :
to_date(sysdate,'DD/MM/YYYY')
Pas bon. Sysdate est une date.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 14h54   #3
Membre éprouvé
 
Avatar de miloux32
 
Inscription : juillet 2003
Messages : 538
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 538
Points : 473
Points : 473
et en les lancant les 2 à la même date ???
parce que bon moi à part le sysdate (date du jour) qui devient "28/02/2008" dans la 2ieme requete je vois pas trop la différence ...

Si c'est ça, on ne pourra rien faire tu sais ... une base de données ca bouge , si tu changes les dates de référence ... c'est normal que tu n'ais pas le même résultat .....
__________________
C'est pas parce que ca marche que c'est bon!!
Pensez au bouton "Résolu"
Je ne réponds pas en privé aux questions
miloux32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 14h54   #4
Membre chevronné
 
Avatar de philcero
 
Inscription : septembre 2007
Messages : 519
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2007
Messages : 519
Points : 649
Points : 649
Si j'ai bien vu la seule différence est au niveau du "sysdate" qui devient "'28/02/2008'". Pour moi c'est normal car sysdate c'est maintenant à 28/04/2008 à 14h53 alors que ton '28/04/2008' c'est le 28/04/2008 à 00h00.

Pour moi la différence vient des enregistrements situés entre ce matin 00h00 et maintenant...

PS : C'est 28/02/2008 comme dans le code ou 28/04/2008 comme je le pense ?
philcero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 14h55   #5
Membre éprouvé
 
Avatar de miloux32
 
Inscription : juillet 2003
Messages : 538
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 538
Points : 473
Points : 473
Citation:
Envoyé par philcero Voir le message
Si j'ai bien vu la seule différence est au niveau du "sysdate" qui devient "'28/02/2008'". Pour moi c'est normal car sysdate c'est maintenant à 28/04/2008 à 14h53 alors que ton '28/04/2008' c'est le 28/04/2008 à 00h00.

Pour moi la différence vient des enregistrements situés entre ce matin 00h00 et maintenant...
c'est pas "28/04/2008" mais "28/02/2008" ca change beaucoup plus les données
__________________
C'est pas parce que ca marche que c'est bon!!
Pensez au bouton "Résolu"
Je ne réponds pas en privé aux questions
miloux32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 14h56   #6
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
En fait y'a qu'à faire un
Edit : Si c'est bien 28/04/2008
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 15h05   #7
Membre du Club
 
Avatar de Sabact
 
Inscription : septembre 2006
Messages : 189
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 189
Points : 56
Points : 56
Envoyer un message via AIM à Sabact
Citation:
Envoyé par McM Voir le message
En fait y'a qu'à faire un
Edit : Si c'est bien 28/04/2008
Oui bien c'est bien 28/04/2008 mais non 28/02/2008 mais les résultats sont toujours diffèrents
__________________
Un sot ne dit pas de choses intelligentes, mais un homme intelligent dit beaucoup de bêtises.
Sabact est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 15h09   #8
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
Code :
SELECT sysdate FROM dual
?
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 15h09   #9
Membre chevronné
 
Avatar de philcero
 
Inscription : septembre 2007
Messages : 519
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2007
Messages : 519
Points : 649
Points : 649
C'est peut-être tout con, as-tu fait un SELECT SYSDATE FROM DUAL pour vérifier que ton serveur n'est pas au 3 mai 1976 ?

Je sais c'est idiot, mais bon...
philcero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 15h17   #10
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
Mais non c'est pas idiot. La preuve on y a pensé en même temps.

Sinon, Sabact, c'est toi qui a les données sous la main. A toi de faire le comparatif des sous requetes sur la table cotation (1 fois avec le paramètre en dur, l'autre avec sysdate)

Fais juste un
Code :
1
2
3
SELECT * FROM cotation WHERE ... AND date_validite >= trunc(sysdate)
minus
SELECT * FROM cotation WHERE ... AND date_validite >= to_date('28.04.2008', 'DD.MM.YYYY')
et l'inverse aussi au cas où la 2nde ramène plus de lignes que la première.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 15h25   #11
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Citation:
Envoyé par McM Voir le message
C'est sympa de nous filer du code.
C'est le jeu des 7 erreurs ?

Code :
to_date(sysdate,'DD/MM/YYYY')
Pas bon. Sysdate est une date.

Pas bon? tu veux dire absoluement dégueu
Code :
1
2
3
4
5
6
7
8
SQL> ALTER session SET nls_date_format='DD/D/DDD';
 
Session altered.
 
SQL> SELECT to_char(to_date(sysdate,'DD/MM/YYYY'),'DL') FROM dual;
TO_CHAR(TO_DATE(SYSDATE,'DD/M
-----------------------------
Monday, February 28, 0119
pas vraiment la date du jour...
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 15h27   #12
Membre du Club
 
Avatar de Sabact
 
Inscription : septembre 2006
Messages : 189
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 189
Points : 56
Points : 56
Envoyer un message via AIM à Sabact
Citation:
Envoyé par philcero Voir le message
C'est peut-être tout con, as-tu fait un SELECT SYSDATE FROM DUAL pour vérifier que ton serveur n'est pas au 3 mai 1976 ?

Je sais c'est idiot, mais bon...
Code :
1
2
3
4
5
6
 
SQL> SELECT sysdate FROM dual;
 
SYSDATE                                                                         
--------                                                                        
28/04/08
__________________
Un sot ne dit pas de choses intelligentes, mais un homme intelligent dit beaucoup de bêtises.
Sabact est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 15h44   #13
Membre chevronné
 
Avatar de philcero
 
Inscription : septembre 2007
Messages : 519
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2007
Messages : 519
Points : 649
Points : 649
On en revient à mon idée première :

Code :
1
2
3
4
5
6
7
8
9
SQL> SELECT sysdate FROM dual;
 
SYSDATE
---------
28-APR-08
 
SQL> SELECT 'coucou' FROM dual WHERE to_date(sysdate,'DD/MM/YYYY')=to_date('28/04/2008','DD/MM/YYYY');
 
no rows selected
to_date(sysdate,'DD/MM/YYYY') garde l'horaire en elle même si cela ne se voie pas. Pour avoir uniquement la date à 00h00 :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SQL> SELECT 'coucou' FROM dual WHERE to_date(sysdate,'DD/MM/YYYY')=to_date('28/04/2008','DD/MM/YYYY');
 
no rows selected
 
SQL> SELECT to_date(sysdate,'DD/MM/YYYY') FROM dual;
 
TO_DATE(S
---------
28-APR-08
 
SQL> SELECT to_date('28/04/2008','DD/MM/YYYY') FROM dual;
 
TO_DATE('
---------
28-APR-08
 
SQL> select 'coucou' from dual where to_date(to_char(sysdate,'DD/MM/YYYY'),'DD/MM/YYYY')=to_date('28/04/2008','DD/MM/YYYY');
 
'COUCO
------
coucou
philcero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 15h50   #14
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
Déjà donné le code du trunc.
Citation:
Envoyé par Sabact Voir le message
Citation:
Envoyé par McM Voir le message
En fait y'a qu'à faire un
Edit : Si c'est bien 28/04/2008
Oui bien c'est bien 28/04/2008 mais non 28/02/2008 mais les résultats sont toujours diffèrents
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 16h02   #15
Membre du Club
 
Avatar de Sabact
 
Inscription : septembre 2006
Messages : 189
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 189
Points : 56
Points : 56
Envoyer un message via AIM à Sabact
Citation:
Envoyé par McM Voir le message
Déjà donné le code du trunc.
En se lancant dans le TOAD j'ai eu 28/04/2008 et dans sqlplus 28/04/08,
en vérifiant dans le regedit on a trouvé le format de la date dd/m/rr
C'est résolu merci.
__________________
Un sot ne dit pas de choses intelligentes, mais un homme intelligent dit beaucoup de bêtises.
Sabact est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 16h36   #16
Membre du Club
 
Avatar de Sabact
 
Inscription : septembre 2006
Messages : 189
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 189
Points : 56
Points : 56
Envoyer un message via AIM à Sabact
Pour être bien claire, je voudrai demande une plus d'information sur le format de la date, d'après vous à quoi diffère le format 'dd/mm/rrrr' et 'dd/mm/yyyy'.
Merci
__________________
Un sot ne dit pas de choses intelligentes, mais un homme intelligent dit beaucoup de bêtises.
Sabact est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 16h44   #17
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
Citation:
Envoyé par Sabact Voir le message
En se lancant dans le TOAD j'ai eu 28/04/2008 et dans sqlplus 28/04/08,
en vérifiant dans le regedit on a trouvé le format de la date dd/m/rr
C'est résolu merci.

Les classiques différences de valeurs des variables NLS dans les clients graphiques ...
__________________
La théorie, c'est quand on sait tout mais que rien ne fonctionne.
La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 17h55   #18
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Citation:
Envoyé par philcero Voir le message
to_date(sysdate,'DD/MM/YYYY')
garde l'horaire en elle même si cela ne se voie pas
non, c'est pas vrai ça.

Par contre to_date(sysdate,'DD/MM/YYYY') avec un format NLS de DD-MON-RR retourne une date au 1er siècle après JC
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 17h57   #19
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
to_date(sysdate, 'DD/MM/YYYY')
==>
to_date(to_char(sysdate),'DD/MM/YYYY')
==>
to_char('28-APR-08','DD/MM/YYYY')
==>
28 avril 0008

__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider 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 19h56.


 
 
 
 
Partenaires

Hébergement Web