1
votes

Comment collecter des données à gauche d'une chaîne de texte dans Oracle SQL

J'ai un SQL qui est utilisé pour renvoyer toutes les données client, cependant, tout est dans un seul champ. Le SQL que j'utilise est:

John, Doe, Client ID 7, Region Code, 4....

Cust_Desc renvoie les informations suivantes dans le format suivant

SELECT Cust_Desc
FROM All_Cust_Data

Je dois diviser les données à gauche de tout à partir de , code de région de sorte que la requête ne renvoie que John, Doe, ID client 7 .


0 commentaires

3 Réponses :


0
votes

utilisez regexp_replace

with All_Cust_Data(Cust_Desc) as
(
 select 'John, Doe, Client ID 7, Region Code, 4....' from dual
)
select regexp_replace(Cust_Desc,'(.*),.\Region Code.*','\1') as "Result String"
  from All_Cust_Data;

    Result String
-----------------------
John, Doe, Client ID 7

Démo Rextester a >


0 commentaires

0
votes

Essayez les fonctions substr et instr combinées

select Cust_Desc, substr(Cust_Desc,0,INSTR(Cust_Desc,'Region Code')-1) from All_Cust_Data;


0 commentaires

0
votes

Par exemple:

SQL> with all_cust_data (cust_Desc) as
  2    (select 'John, Doe, Client ID 7, Region Code, 4....' from dual)
  3  select rtrim(trim(substr(cust_Desc, 1, instr(cust_desc, 'Region Code') - 1)), ',') result
  4  from all_cust_data;

RESULT
----------------------
John, Doe, Client ID 7

SQL>

Il utilise l'ancienne combinaison SUBSTR + INSTR ; Les fonctions TRIM sont ici pour supprimer les espaces de fin et la virgule (celle derrière le numéro 7,)


0 commentaires