如何从 PL/SQL 中的字符串分隔符中检索数字



我需要从这种类型的字符串中检索源号(8385(:SLV 是一个 varchar,包含字符串

slv=
DEFAULTLOCALE=S=en_GBORIGIN=L=8385WORKGROUP=L=3MAINORIGIN=L=183CLAIMID=L=7416882

这里使用的分隔符是 NAK(否定确认(和 ESC(转义(。另外,请注意,此字符串是一个模板,源号的长度可能会有所不同。所以我不能使用固定代码,例如:

substr(slv,instr(slv,'ORIGIN=L=',1)+9,4);//因为这将获取固定的 4 个位置,并且原点编号可能会变化为 3 甚至 5。

请指教。蒂亚

PS-这必须是pl/sql或sql。

使用REGEXP_SUBSTR我们可以尝试以下方法:

SELECT
    REGEXP_SUBSTR('DEFAULTLOCALE=S=en_GBORIGIN=L=8385WORKGROUP=L=3MAINORIGIN=L=183CLAIMID=L=7416882',
        'GBORIGIN=L=(d+)', 1, 1, NULL, 1) origin
FROM dual
8385

演示

这是在PL/SQL中执行此操作的一种方法,因为您在注释中提到希望能够将其保存在变量中以便打印它:

declare
  v_slv varchar2(100) := 'DEFAULTLOCALE=S=en_GBORIGIN=L=8385WORKGROUP=L=3MAINORIGIN=L=183CLAIMID=L=7416882';
  v_origin varchar2(8);
BEGIN
  v_origin := REGEXP_SUBSTR(v_slv, 'GBORIGIN=L=(d+)', 1, 1, NULL, 1);
  dbms_output.put_line('Origin is: ' || v_origin);
END;

我认为这有效:

SELECT REGEXP_SUBSTR(str,'[[:digit:]]+') str FROM
(
 SELECT 'slv=DEFAULTLOCALE=S=en_GBORIGIN=L=8385WORKGROUP=L=3MAINORIGIN=L=183CLAIMID=L=7416882' str FROM dual
)
/

输出:8385

Declare v_val varchar2(255) -- if you just want to print it BEGIN SELECT REGEXP_SUBSTR('slv=DEFAULTLOCALE=S=en_GBORIGIN=L=8385WORKGROUP=L=3MAINORIGIN=L=183CLAIMID=L=7416882','[0-9]+',1,1) into v_val FROM dual; DBMS_OUTPUT.PUT_LINE ("output" || v_val); END;

最新更新