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
.
3 Réponses :
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
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;
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,
)