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 24/05/2011, 09h22   #1
Invité de passage
 
Inscription : août 2008
Messages : 15
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 15
Points : 4
Points : 4
Par défaut Formater le résultat d'une requête

Bonjour,

Je n'ai pas trouvé de réponse à ma question qui pourtant ne doit pas être bien compliqué (mais je n'utilise certainement pas les bons termes dans ma recherche).

Voilà donc mon problème :

Je fais un
Code :
SELECT * FROM numcontrats
Cette requête me retourne des numéros de contrats sur 3, 4 ou 5 chiffres. En fait, je voudrais qu'elle me retourne toujours un résultat sur 5 chiffres en complétant par des "0" devant les résultats à 3 et 4 chiffres.

Comment faire ?

Merci d'avance pour votre réponse.
ibhow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 09h41   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
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 311
Points : 5 808
Points : 5 808
Number Format Models
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/05/2011, 09h42   #3
Membre du Club
 
AC
Inscription : octobre 2010
Messages : 28
Détails du profil
Informations personnelles :
Nom : AC
Âge : 43
Localisation : Suisse

Informations forums :
Inscription : octobre 2010
Messages : 28
Points : 48
Points : 48
Bonjour,

Vous pouvez chercher du côté de la fonction LPAD.

Bons tests !
wahnfried est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 10h00   #4
Membre éclairé
 
Avatar de juvamine
 
Développeur informatique
Inscription : mai 2004
Messages : 394
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mai 2004
Messages : 394
Points : 377
Points : 377
ou simplement
Code :
SELECT RIGHT('00000' || num_contrat, 5) FROM numcontrats
__________________
http://chat.developpez.com/ -- Salon Base de Données --
juvamine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 10h29   #5
Membre du Club
 
AC
Inscription : octobre 2010
Messages : 28
Détails du profil
Informations personnelles :
Nom : AC
Âge : 43
Localisation : Suisse

Informations forums :
Inscription : octobre 2010
Messages : 28
Points : 48
Points : 48
Citation:
Envoyé par juvamine Voir le message
ou simplement
Code :
SELECT RIGHT('00000' || num_contrat, 5) FROM numcontrats
Si l'on est bien sur le forum Oracle, il risque d'y avoir un problème...
wahnfried est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/05/2011, 10h36   #6
Invité de passage
 
Inscription : août 2008
Messages : 15
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 15
Points : 4
Points : 4
Citation:
Envoyé par wahnfried Voir le message
Bonjour,

Vous pouvez chercher du côté de la fonction LPAD.

Bons tests !
Effectivement SELECT LPAD(num_contrat,5,'0') FROM numcontrats; répond bien à mon besoin.

Merci à tous !
ibhow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 11h33   #7
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
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 684
Points : 10 438
Points : 10 438
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
La fonction LPAD ici ne présente pas d'intérêt particulier.
Votre colonne étant un numérique, pour utiliser la fonction LPAD qui travaille sur des chaînes de caractères, Oracle effectue une conversion implicite à l'aide de la fonction TO_CHAR.

Hors cette fonction possède déjà ce qu'il faut pour mettre en forme votre numérique, il suffisait de suivre le lien de mnitu :
Code :
1
2
SELECT to_char(num_contrat, 'fm00000') AS num_contrat
  FROM numcontrats;
Si on fait un comparatif de performances, on le constate assez bien :
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
37
38
39
40
41
declare
    v$_time1           pls_integer := 0;
    v$_time2           pls_integer := 0;
    v$_number constant pls_integer DEFAULT 5;
    v$_loops  constant pls_integer DEFAULT 1e7;
    v$_string          varchar2(5);
 
begin
    v$_time1 := dbms_utility.get_time;
 
    FOR i IN 1..v$_loops
    loop
        v$_string := lpad(v$_number, 5, '0');
    end loop;
 
    v$_time2 := dbms_utility.get_time;
    dbms_output.put_line('Solution LPAD    : ' || to_char(v$_time2 - v$_time1));
    v$_time1 := dbms_utility.get_time;
 
    FOR i IN 1..v$_loops
    loop
        v$_string := lpad(to_char(v$_number), 5, '0');
    end loop;
 
    v$_time2 := dbms_utility.get_time;
    dbms_output.put_line('Solution LPAD + TO_CHAR : ' || to_char(v$_time2 - v$_time1));
    v$_time1 := dbms_utility.get_time;
 
    FOR i IN 1..v$_loops
    loop
        v$_string := to_char(v$_number,'fm00000');
    end loop;
 
    v$_time2 := dbms_utility.get_time;
    dbms_output.put_line('Solution TO_CHAR : ' || to_char(v$_time2 - v$_time1));
end;
/
 
Solution LPAD           : 878
Solution LPAD + TO_CHAR : 763
Solution TO_CHAR        : 129
Évidemment, la différence reste faible même pour dix millions de tests, mais autant bien faire dès que c'est possible.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/05/2011, 11h42   #8
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
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 311
Points : 5 808
Points : 5 808
Pour moi le problème n'est pas lié aux performances mais plutôt à la différence des résultats obtenus
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
Connected TO Oracle DATABASE 10g Enterprise Edition Release 10.2.0.4.0 
Connected AS mni
 
SQL> 
SQL> WITH DATA AS (
  2    SELECT 500 AS id FROM dual union ALL
  3    SELECT 50000 FROM dual union ALL
  4    SELECT 500000 FROM dual
  5  )
  6  SELECT to_char(id,'FM09999') to_char, LPad(id, 5, '0') lpad
  7    FROM DATA
  8  /
 
TO_CHAR LPAD
------- -----
00500   00500
50000   50000
######  50000
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h04.


 
 
 
 
Partenaires

Hébergement Web