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 17/11/2010, 09h54   #1
Membre du Club
 
Homme
Inscription : août 2003
Messages : 79
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Services de proximité

Informations forums :
Inscription : août 2003
Messages : 79
Points : 54
Points : 54
Par défaut Je ne parviens pas à contruire ma requête

Bonjour à tous,

J'utilise SQL Developper et SQL PLUS.
Je dois analyser une colonne number sans précision pour savoir si dans les enregistrement il y a au moins une données qui possède des virgules.
Dans ce cas, j'extrais longueur maximal de la partie entière et de la partie décimale des données.
Si aucun enregistrement ne possède de décimale alors je retourne uniquement la longueur max de la partie entière.

Voici où j'en, suis :
Code :
1
2
3
4
5
6
 
SELECT
       max(Length(SUBSTR(ID_PROSP  ,1,INSTR(ID_PROSP  ,',')-1))) max1,
      max(Length(SUBSTR(ID_PROSP ,INSTR( ID_PROSP ,',')+1))) max2
      FROM TEST1
      WHERE rownum < 100 ;
Ci-dessous les données de ma table test1 :
0,11
2578578
0.698
1.3

Résultat de ma requête :
max1 ; max2
1 ; 7

Alors que j'aimerais obtenir :
max1 ; max2
7 ; 3

J'ai pensé à faire deux requêtes.
Une qui recherche recherche les virgules et une autre si il n'y a pas de virgule
Mais c'est pour appliquer sur des tables contenant plus de 100 000 enregistrements. Je suis embeté de devoir analyser deux fois la colonne. C'est pas trés optimisé.

Comment dois-je modifier ma requête pour obtenir le résultat souhaité ?
Pouvez-vous me mettre sur la voie ?

Merci par avance à tous.
Cordialement,
Thierry.
Comment dois-je modifier ma requête ?
__________________
Air startout
startout est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 10h48   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 680
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 680
Points : 10 479
Points : 10 479
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Essayez ainsi :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
WITH test1 AS
(
SELECT       0.11 AS nb FROM dual union ALL
SELECT 2578578          FROM dual union ALL
SELECT       0.698      FROM dual union ALL
SELECT       1.3        FROM dual
)
SELECT max(length(trunc(nb)))    AS p_ent,
       max(length(mod(nb, 1))-1) AS p_dec
  FROM test1;
 
     P_ENT      P_DEC
---------- ----------
         7          3
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 11h19   #3
Membre du Club
 
Homme
Inscription : août 2003
Messages : 79
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Services de proximité

Informations forums :
Inscription : août 2003
Messages : 79
Points : 54
Points : 54
Génial Waldar.
C'est beaucoup plus simple que je le pensais.
J'étais à l'ouest... je partais vers les requêtes imbriqués...
Merci beaucoup

Cordialement,
Thierry
__________________
Air startout
startout 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 16h37.


 
 
 
 
Partenaires

Hébergement Web