Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Sql*Plus
Sql*Plus Forum d'entraide sur Oracle Sql*Plus
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 23/05/2011, 19h57   #1
Invité de passage
 
Homme ILIA AMADOU
Administrateur de base de données
Inscription : mai 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme ILIA AMADOU
Localisation : Niger

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Service public

Informations forums :
Inscription : mai 2011
Messages : 3
Points : 0
Points : 0
Par défaut affichage sql avec Substr

Bonjour à tous.
Je suis nouveau sur ce forum et un peu débutant sur oracle.
je ne sais pas si le sujet a été anciennement débattu.
En fait j'ai la requête ci-après (Oracle 10g express)
Code :
1
2
3
4
5
6
SQL> SELECT substr(sta_nom,1,3) sta,sta_code FROM station WHERE rownum<=5;
 
STA             ;STA_CODE        
------------;--------------- 
Gar               ;1051700106 
Gra               ;1051700109
Bien que STA soit 3 caractères de sta_nom (varchar2(50)), la requete reserve 12 tirets.
J'ai essayé toutes les options de cursor_sharing et trim, rtrim mais hélas. Avec cursor_sharing Exact les tirets de substr sont par multiple de 4 de la longueur de chaine à extraire.
Comment faire pour que l'affichage de STA se limite à 3 caractères seulement comme suit?
Code :
1
2
3
STA;STA_CODE        
---;--------------- 
Gar;1051700109
Merci.
AMIL10g est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 23h16   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Peux tu fournir une démo, moi je ne reproduis pas en 11.2:
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
42
43
44
45
46
47
48
49
SQL> CREATE TABLE test1 (c varchar2(50));
 
TABLE created.
 
SQL> INSERT INTO test1
SELECT lpad('X',3*level,'X') AS c FROM dual connect BY level <= 10;
 
10 rows created.
 
SQL> SELECT * FROM test1;
 
C
--------------------------------------------------
XXX
XXXXXX
XXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
10 rows selected.
 
SQL> SELECT substr(c,1,3) test FROM test1;
 
TES
---
XXX
XXX
XXX
XXX
XXX
XXX
XXX
XXX
XXX
XXX
 
10 rows selected.
 
SQL> SHOW parameter cursor_sharing
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cursor_sharing                       string      EXACT
SQL>
Sinon regarde du côté de COLUMN pour sqlplus
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 10h17   #3
Invité de passage
 
Homme ILIA AMADOU
Administrateur de base de données
Inscription : mai 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme ILIA AMADOU
Localisation : Niger

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Service public

Informations forums :
Inscription : mai 2011
Messages : 3
Points : 0
Points : 0
Merci skuatamad
ça me parait déjà bizarre. J'ai fait le même test avec ton exemple et eu même résultat que toi mais avec ma table ça ne marche pas. Le problème est donc lié à ma table??
voilà résultat ton test suivi de la même requête sur ma table.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SQL> SELECT * FROM test1;
 
C                                                                               
--------------------------------------------------                              
XXX                                                                             
XXXXXX                                                                          
XXXXXXXXX                                                                       
XXXXXXXXXXXX                                                                    
XXXXXXXXXXXXXXX                                                                 
XXXXXXXXXXXXXXXXXX                                                              
XXXXXXXXXXXXXXXXXXXXX                                                           
XXXXXXXXXXXXXXXXXXXXXXXX                                                        
XXXXXXXXXXXXXXXXXXXXXXXXXXX                                                     
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                                                  
 
10 ligne(s) sélectionnée(s).
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SQL> SELECT substr(c,1,3) test FROM test1;
 
TES                                                                             
---                                                                             
XXX                                                                             
XXX                                                                             
XXX                                                                             
XXX                                                                             
XXX                                                                             
XXX                                                                             
XXX                                                                             
XXX                                                                             
XXX                                                                             
XXX       
 
10 ligne(s) sélectionnée(s).
Code :
1
2
3
4
5
SQL> SHOW parameter cursor_sharing
 
NAME                                 TYPE        VALUE                          
------------------------------------ ----------- ------------------------------ 
cursor_sharing                       string      EXACT
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SQL> SELECT substr(sta_nom,1,3) sta FROM station WHERE rownum<10;
 
STA                                                                             
------------                                                                    
 Ma                                                                             
ABU                                                                             
AKK                                                                             
ANS                                                                             
Alc                                                                             
Atc                                                                             
Atc                                                                             
Ath                                                                             
Ayo                                                                             
 
9 ligne(s) sélectionnée(s).
 
SQL> spool off
AMIL10g est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 10h31   #4
Invité de passage
 
Homme ILIA AMADOU
Administrateur de base de données
Inscription : mai 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme ILIA AMADOU
Localisation : Niger

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Service public

Informations forums :
Inscription : mai 2011
Messages : 3
Points : 0
Points : 0
Voilà un autre cas de figure avec la fonction column format.
La fonction substr renvoi toujours la même chose.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SQL> COLUMN sta_nom format A20 TRUNCATE;
SQL> SELECT sta_nom FROM station WHERE rownum<10;
 
STA_NOM                                                                         
--------------------                                                            
 Mare Higa                                                                      
ABUENSHIE                                                                       
AKKA                                                                            
ANSONGO                                                                         
Alcongui                                                                        
Atchakpa pont de Sav                                                            
Atcherigbe                                                                      
Athieme sur Mono                                                                
Ayorou                                                                          
 
9 ligne(s) sélectionnée(s).
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQL> SELECT substr(sta_nom,1,15) sta FROM station WHERE rownum<10;
 
STA                                                                             
------------------------------------------------------------                    
Mare Higa                                                                      
ABUENSHIE                                                                       
AKKA                                                                            
ANSONGO                                                                         
Alcongui                                                                        
Atchakpa pont d                                                                 
Atcherigbe                                                                      
Athieme sur Mon                                                                 
Ayorou                                                                          
 
9 ligne(s) sélectionnée(s).
AMIL10g est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 17h37   #5
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
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 925
Points : 4 547
Points : 4 547
Tu employes peut-être un code de charactères "Multi-bytes"

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQL> SELECT VALUE FROM nls_database_parameters WHERE PARAMETER='NLS_CHARACTERSET';
VALUE
----------------------------------------
AL32UTF8
 
SQL> CREATE TABLE t(x varchar2(12));
TABLE created.
 
SQL> INSERT INTO t VALUES ('xxxx');
1 row created.
 
SQL> SELECT substr(x,1,3) FROM t;
SUBSTR(X,1,3
------------
xxx
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 26/05/2011, 17h41   #6
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
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 925
Points : 4 547
Points : 4 547
Pour avoir 3 octets, utilise SUBSTRB

Code :
1
2
3
4
SQL> SELECT substrb(x,1,3) FROM t;
SUB
---
xxx
PS: si tu employes substrb avec des caractères multi-octets, je te dis pas le résultat, style "Donne moi stpl 1 charactère et demi "
Code :
1
2
3
4
5
6
7
8
SQL> INSERT INTO t VALUES ('éè');
 
1 row created.
 
SQL>  SELECT substrb(x,1,4) FROM t;
SUBS
----
éü
Donc les 3/4 de éè c'est éü, tu vois le style !!!
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web