在 pl/sql 中拆分字符串
spliting the string in pl/sql
您好,我想将下面的字符串分成 3 个部分。我正在使用 INSTR 和 SUBSTR。有没有更好的方法呢?
DEUT TRA USD RM TRAD UK, GB02DEUT40508124381319 (USD)
我想要的输出
account_name=DEUT TRA USD RM TRAD UK
account_number=GB02DEUT40508124381319
account_currency=USD
我正在使用下面的代码。
FCBD(i)='DEUT TRA USD RM TRAD UK, GB02DEUT40508124381319 (USD)',
account_name := substr(FCBD(i),1,INSTR(FCBD(i),',',1,1)-1);
dbms_output.put_line('Account Name:'||account_name);
account_number := substr(FCBD(i),INSTR(FCBD(i),',',1,1)+2,INSTR(FCBD(i),' ',INSTR(FCBD(i),',',1,1)+2,1)-INSTR(FCBD(i),',',1,1)-2);
dbms_output.put_line('Account Number:'||account_number);
account_currency := substr(FCBD(i),INSTR(FCBD(i),'(',1,1)+1,INSTR(FCBD(i),')',1,1) - INSTR(FCBD(i),'(',1,1)-1);
有什么更好的方法吗?
我会推荐 regexp_substr()
:
select trim(regexp_substr(fcbd, '^[^,]+')) as account_name,
replace(regexp_substr(fcbd, ', [^ ]+'), ', ', '') as account_number,
replace(regexp_substr(fcbd, '[^)]{3}\)$'), ')', '') as account_currency
from t;
Here 是一个 db<>fiddle.
您好,我想将下面的字符串分成 3 个部分。我正在使用 INSTR 和 SUBSTR。有没有更好的方法呢?
DEUT TRA USD RM TRAD UK, GB02DEUT40508124381319 (USD)
我想要的输出
account_name=DEUT TRA USD RM TRAD UK
account_number=GB02DEUT40508124381319
account_currency=USD
我正在使用下面的代码。
FCBD(i)='DEUT TRA USD RM TRAD UK, GB02DEUT40508124381319 (USD)',
account_name := substr(FCBD(i),1,INSTR(FCBD(i),',',1,1)-1);
dbms_output.put_line('Account Name:'||account_name);
account_number := substr(FCBD(i),INSTR(FCBD(i),',',1,1)+2,INSTR(FCBD(i),' ',INSTR(FCBD(i),',',1,1)+2,1)-INSTR(FCBD(i),',',1,1)-2);
dbms_output.put_line('Account Number:'||account_number);
account_currency := substr(FCBD(i),INSTR(FCBD(i),'(',1,1)+1,INSTR(FCBD(i),')',1,1) - INSTR(FCBD(i),'(',1,1)-1);
有什么更好的方法吗?
我会推荐 regexp_substr()
:
select trim(regexp_substr(fcbd, '^[^,]+')) as account_name,
replace(regexp_substr(fcbd, ', [^ ]+'), ', ', '') as account_number,
replace(regexp_substr(fcbd, '[^)]{3}\)$'), ')', '') as account_currency
from t;
Here 是一个 db<>fiddle.