【问题标题】:spliting the string in pl/sql在 pl/sql 中拆分字符串
【发布时间】:2021-01-06 22:02:07
【问题描述】:

嗨,我想将下面的字符串分成 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);

有没有更好的办法?

【问题讨论】:

    标签: sql database oracle plsql oracle-sqldeveloper


    【解决方案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 是一个 dbfiddle。

    【讨论】:

    • 谢谢戈登。它以货币形式提供额外的“)”
    • @Shruti 。 . .我刚刚修好了。它还在account_name 中有一个尾随空格。
    猜你喜欢
    • 2013-02-05
    • 2018-11-10
    • 2017-06-05
    • 2011-04-12
    • 2018-10-07
    • 2011-04-29
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多