Sql 具有分隔符作用域的oracle substr函数
我正在尝试查找与子字符串最接近的分隔符,该子字符串的字符数有限制Sql 具有分隔符作用域的oracle substr函数,sql,oracle10g,Sql,Oracle10g,我正在尝试查找与子字符串最接近的分隔符,该子字符串的字符数有限制 Eg: select 'oneone,twotwo, threethree, four,five,six,seven,eight,nine,ten,eleven,twelve' from dual; select substr('oneone,twotwo, threethree, four,five,six,seven,eight,nine,ten,eleven,twelve',1,30) from dual ;-- Firs
Eg: select 'oneone,twotwo, threethree, four,five,six,seven,eight,nine,ten,eleven,twelve' from dual;
select substr('oneone,twotwo, threethree, four,five,six,seven,eight,nine,ten,eleven,twelve',1,30) from dual ;-- First 30 characters.
现在,我想限制substr,使其仅从该字符串中提取前30个字符,同时确保substr在30个字符中找不到端点时以最接近的“.”结尾
Eg: select 'oneone,twotwo, threethree, four,five,six,seven,eight,nine,ten,eleven,twelve' from dual;
select substr('oneone,twotwo, threethree, four,five,six,seven,eight,nine,ten,eleven,twelve',1,30) from dual ;-- First 30 characters.
前30个字符产生:一、二、二、三、四
但是,我希望预期结果在“fou”的不完整条目之前找到最近的分隔符“”,并得到结果
Expected Result:oneone,twotwo, threethree -- since "fou" is incomplete and thus should be excluded
很有可能有一个更简单的解决方案,但是
SQL> ed
Wrote file afiedt.buf
1 with x as (
2 select 'oneone,twotwo, threethree, four,five,six,seven,eight,nine,ten,eleven,twelve' str
3 from dual
4 )
5 select substr( x.str,
6 1,
7 instr( substr( x.str, 1, 30 ),
8 ',',
9 -1 ) -1)
10* from x
SQL> /
SUBSTR(X.STR,1,INSTR(SUBS
-------------------------
oneone,twotwo, threethree
将工作,当你打破它,相对容易遵循
从里到外工作
substr( x.str, 1, 30 )
获取字符串的前30个字符
instr( substr( x.str, 1, 30 ),
',',
-1 )
提供30个字符字符串中最后一个逗号的位置。那么
substr( x.str,
1,
instr( substr( x.str, 1, 30 ),
',',
-1 ) -1)
将字符串从位置1移到30个字符字符串中最后一个逗号之前的位置。谢谢Justin…适合我!但是,如果有一个有效的方法(请允许),我也很高兴听到这个消息。但是,目前这一切都很好。