我有一个字符串值作为参数,我需要解析它。我的价值是:
param := ('1234@5432@4567@8763');
我必须部分获得1234
,5432
,4567
和8763
值。我将这些值设置为不同的参数。
如何使用SQL解决它?
谢谢,
答案 0 :(得分:0)
假设您使用PL / SQL并且需要将参数或变量的值拆分为四个变量,这可能是一种方式:
declare
param varchar2(100);
param1 varchar2(100);
param2 varchar2(100);
param3 varchar2(100);
param4 varchar2(100);
begin
param := '1234@5432@4567@8763';
--
param1 := substr(param, 1, instr(param, '@', 1, 1)-1);
param2 := substr(param, instr(param, '@', 1, 1) +1 , instr(param, '@', 1, 2) - instr(param, '@', 1, 1)-1);
param3 := substr(param, instr(param, '@', 1, 2) +1 , instr(param, '@', 1, 3) - instr(param, '@', 1, 2)-1);
param4 := substr(param, instr(param, '@', 1, 3) +1 );
--
dbms_output.put_line('Param1: ' || param1);
dbms_output.put_line('Param2: ' || param2);
dbms_output.put_line('Param3: ' || param3);
dbms_output.put_line('Param4: ' || param4);
end;
使用正则表达式,您可以通过搜索后跟@
或行尾('$'
的字符串的第1,第2,......出现来获得相同的结果); Gary_W在其评论
...
param1 := regexp_substr(param, '(.*?)(@|$)', 1, 1, '', 1 );
param2 := regexp_substr(param, '(.*?)(@|$)', 1, 2, '', 1 );
param3 := regexp_substr(param, '(.*?)(@|$)', 1, 3, '', 1 );
param4 := regexp_substr(param, '(.*?)(@|$)', 1, 4, '', 1 );
...
答案 1 :(得分:0)
select level, regexp_substr(a,'\d+',1,level)
from(select '1234@5432@4567@8763' a from dual)
connect by level <= regexp_count(a,'@') + 1