IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sql*Plus Oracle Discussion :

affichage sql avec Substr


Sujet :

Sql*Plus Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Niger

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    STA;STA_CODE        
    ---;--------------- 
    Gar;1051700109
    Merci.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Peux tu fournir une démo, moi je ne reproduis pas en 11.2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Niger

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> show parameter cursor_sharing
     
    NAME                                 TYPE        VALUE                          
    ------------------------------------ ----------- ------------------------------ 
    cursor_sharing                       string      EXACT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Niger

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Par défaut
    Voilà un autre cas de figure avec la fonction column format.
    La fonction substr renvoi toujours la même chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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).

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Tu employes peut-être un code de charactères "Multi-bytes"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Pour avoir 3 octets, utilise SUBSTRB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !!!

Discussions similaires

  1. [Débutant] C# Affichage SQL avec while
    Par AirStyle dans le forum C#
    Réponses: 5
    Dernier message: 11/06/2014, 19h31
  2. Requête sql avec substring en criteria
    Par lodilodi dans le forum Hibernate
    Réponses: 2
    Dernier message: 09/12/2009, 17h05
  3. [MySQL] Affichage du resultat d'une requete SQL avec PHP
    Par tabouet dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 24/09/2009, 14h03
  4. [SQL] affichage d'une requete SQL avec un echo (donnée unique)
    Par khamett dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/10/2007, 20h03
  5. [MySQL] problème affichage image avec sql
    Par igaurillac dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/02/2007, 18h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo