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 Oracle Discussion :

Supprimer deux derniers caractère Oracle SQL


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut Supprimer deux derniers caractère Oracle SQL
    Bonjour,

    J'ai le nom d'une ville + le code du département regroupé ensemble de la manière suivante: Paris75

    Je souhaiterai récupérer uniquement le nom de la ville et je me posais la question suivante (vu que je n'ai pas de requêteur SQL pour effectuer mon test) , avec la fonction SUBSTRING utilisé de la manière suivante est-ce que ça fonctionnerai ?

    pour récupérer uniquement "Paris'".

    Merci d'avance pour vos retours

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Sur Oracle, c'est SUBSTR et pas SUBSTRING, à voir si vous êtes dans le bon forum.
    Par ailleurs attention au DOM TOM qui ont un code sur 3 chiffres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> select substr('Paris75',1,length('Paris75')-2) from dual;
     
    SUBST
    -----
    Paris
     
    SQL>

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut
    Merci pour la solution que vous m'avez apporté

    Effectivement je n'avais pas pensé au cas des DOM-TOM. Mais dans ce cas comment gérer ce cas là ?

    Merci d'avance

  4. #4
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    On peut savoir pourquoi dans cette table il y a une colonne avec des données non atomiques?
    Il aurait fallu créer une colonne Ville et une colonne Département, d'un point de vue modélisation c'set beaucoup plus propre et ça évite les ennuis que tu as actuellement.

    En outre, comme le dit skuatamad, tu vas avoir le problème des DOM-TOM : 3 chiffres dans un cas, 2 dans l'autre...
    Une solution serait, dans le cas où tu as la colonne VILLE avec les données "Ville75", "Ville852", de faire
    substr(VILLE,1,length(VILLE)-INSTR(VILLE, premier_chiffre))
    avec, bien sur, un problème pour écrire en SQL la partie "premier_chiffre".

    Je continue de chercher mais ça semble pas simple.
    Ah si, il faut utiliser REGEXP_INSTR

    Bon, finalement on peut utiliser la requête suivante : substr(object_name,1,regexp_instr(object_name, '[[:digit:]]') -1)
    Voici un exemple sur le dictionnaire de données d'Oracle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select object_name, 
    substr(object_name,1,regexp_instr(object_name, '[[:digit:]]') -1) AS "Pas de chiffre"
    from dba_objects where object_name like '%155';
     
    OBJECT_NAME	Pas de chiffre
    ------------------------------------
    SYS_C0047155	SYS_C
    VW_IND155	VW_IND
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut
    En fait je travail sur l'ETL STAMBIA et j'alimente une table oracle par le biais d'un fichier XML.

    Dans le fichier xml la ville et le departement sont dans une seule balise.

    Voila le pourquoi du "Ce n'est pas automatisé"


    J'avais oublié ce que faisait la fonction "REGEXP_INSTR " mais comment lui indiquer de rechercher uniquement les caractère numérique ?

  6. #6
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Nos messages se sont croisés, regarde ce que j'ai mis plus haut : substr(object_name,1,regexp_instr(object_name, '[[:digit:]]') -1) AS "Pas de chiffre"
    C'set un peu violent comme code mais ça marche.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut
    Effectivement nos messages se sont croisés.

    Déjç merci pour ton code.

    Je l'ai testé mais ça me sors le nom de la ville au lieu de me sortir le code postale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select substr(Ville,1,regexp_instr(Ville,'[[:digit:]]')-1) 
    from STAMBIA.ADRESSE_CLIENT
    Nom : Capture.JPG
Affichages : 2545
Taille : 16,2 Ko


    Alors que je souhaiterai uniquement extraire les code postale (ici 64)
    Nom : Capture.JPG
Affichages : 2500
Taille : 9,7 Ko

  8. #8
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Euh, dans ton premier post, tu parles de récupérer le nom de la ville, pas le code
    Sinon essaye ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select object_name, 
    substr(object_name,1,regexp_instr(object_name,'[[:digit:]]')-1) AS "Pas de chiffre",
    substr(object_name, regexp_instr(object_name, '[[:digit:]]')) AS "Pas de lettres"
    from dba_objects where object_name like '%155';
     
    OBJECT_NAME	Pas de chiffre	Pas de lettres
    ----------------------------------------------------
    SYS_C0047155	SYS_C	0047155
    VW_IND155	VW_IND	155
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut
    YES c'est top ça fonctionne

    Merci beaucoup pour vos solutions !

  10. #10
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Juste pour le code : Enlever des chiffres à droite ou à gauche d'une chaine, c'est possible avec LTRIM ou RTRIM
    En plus le SQL de Ikebukuro me donne des noms à rallonge avec des nombre au milieu de chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT object_name, 
    SUBSTR(object_name,1,REGEXP_INSTR(object_name,'[[:digit:]]')-1) AS "Pas de chiffre",
    SUBSTR(object_name, REGEXP_INSTR(object_name, '[[:digit:]]')) AS "Pas de lettres",
    	RTRIM(object_name, '0123456789') sup_Numero_droite
    FROM dba_objects WHERE object_name LIKE '%155';
     
     
    OBJECT_NAME								Pas de chiffre				Pas de lettres				SUP_NUMERO_DROITE
    oracle/aurora/zephyr/backend/amd64/AMD64AbstractMIR2LIRConverter$155	oracle/aurora/zephyr/backend/amd	64/AMD64AbstractMIR2LIRConverter$155	oracle/aurora/zephyr/backend/amd64/AMD64AbstractMIR2LIRConverter$
    oracle/jdbc/driver/JavaToJavaConverter$155				oracle/jdbc/driver/JavaToJavaConverter$	155					oracle/jdbc/driver/JavaToJavaConverter$
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  11. #11
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Citation Envoyé par McM Voir le message
    En plus le SQL de Ikebukuro me donne des noms à rallonge avec des nombre au milieu de chaine
    Exact mais dans sa table, les chiffres sont uniquement à la fin.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  12. #12
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    solution avec regexp_replace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select regexp_replace(field_name, '(\w+?)\d{2,}', '\1',1,1,'i') from table_name;

  13. #13
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Attention à la Corse aussi (2A, 2B)
    Le plus propre serait peut-être d'identifier le premier numérique dans la chaîne pour réaliser le découpage chaîne gauche / chaîne droite

  14. #14
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Citation Envoyé par Scriuiw Voir le message
    Attention à la Corse aussi (2A, 2B)
    Le plus propre serait peut-être d'identifier le premier numérique dans la chaîne pour réaliser le découpage chaîne gauche / chaîne droite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    regexp_replace(value, '(\w+?)(\d{2,}|\d[A-B])', '\1',1,1)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    regexp_replace(value, '(\w+?)(\d{2,}|\d[A-B])', '\1',1,1,'i')
    pour être insensible à la casse sur A et B de Corse2A/2B.

  15. #15
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut
    Merci pour vos pistes

    J'essaye ton code SQL dans la semaine JeitEmgie pour voir ce que ça donne.

  16. #16
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    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
     
    with tests as (
    select 'Corse2A' value from dual
    union
    select 'Corse2B' value from dual
    union
    select 'Paris75' value from dual
    union
    select 'Pa-ris75' from dual 
    union
    select 'Pa ris75' from dual 
    union
    select 'Pa, ris75' from dual 
    union
    select 'DomTom789' from dual 
    union
    select 'Dom-Tom789' from dual 
    union
    select 'Dom Tom789' from dual 
    union
    select 'Dom_Tom789' from dual 
    union
    select 'Dom|Tom789' from dual 
    )
    select value , regexp_replace(value, '(\w+?)(\d{2,}|\d[A-B])', '\1',1,1) as transformed 
    from tests ;
    VALUE TRANSFORMED
    Corse2A Corse
    Corse2B Corse
    Dom Tom789 Dom Tom
    Dom-Tom789 Dom-Tom
    DomTom789 DomTom
    Dom_Tom789 Dom_Tom
    Dom|Tom789 Dom|Tom
    Pa ris75 Pa ris
    Pa, ris75 Pa, ris
    Pa-ris75 Pa-ris
    Paris75 Paris

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/09/2011, 06h49
  2. Supprimer le dernier caractère d'une string
    Par calagan99 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 10/07/2007, 10h31
  3. Supprimer le dernier caractère "€"?
    Par wormseric dans le forum Langage
    Réponses: 3
    Dernier message: 04/06/2007, 16h52
  4. Réponses: 15
    Dernier message: 28/02/2007, 10h00
  5. [Chaines] Supprimer le dernier caractère
    Par Commodore dans le forum Langage
    Réponses: 1
    Dernier message: 27/06/2006, 09h35

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