需要一个sql语句,查询一个字段中有这样的字符串;
1 一个字符串xxxx,四个字母
2 还含有字符串xxxx0T,六个字母(即在1的后边加两个确定的字母0T)
3 这两个字串的前后顺序不定,字串间用“下划线”分割
例如:kkkk_0B0E0T_0B0E_mmmm 这个例子中的xxxx就是0B0E
请各位大侠赐教
1 一个字符串xxxx,四个字母
2 还含有字符串xxxx0T,六个字母(即在1的后边加两个确定的字母0T)
3 这两个字串的前后顺序不定,字串间用“下划线”分割
例如:kkkk_0B0E0T_0B0E_mmmm 这个例子中的xxxx就是0B0E
请各位大侠赐教
where substr(str_column,6,4)=substr(str_column,13,4)
or substr(str_column,6,4)=substr(str_column,11,4);
-- 情况二:kkkk_0B0E_0B0E0T_mmmmselect * from tb
where substr(str_column,6,4)=substr(str_column,13,4)
or substr(str_column,6,4)=substr(str_column,11,4);
-- 情况二:kkkk_0B0E_0B0E0T_mmmm这里的kkkk可能有多个,mmmm可能多个,而且0B0E_0B0E0T中间可能有其他字符。
比如kkkk_mmmm_0B0E_uuuu_0B0E0T
(
select 'kkkk_0B0EOT_0B0E_mmmm' a from dual union all
select '6540_0B0E_0B0EOT_sdgm' a from dual union all
select 'sdfg_OOXXOT_OOXX_678m' a from dual union all
select 'sdfg_OONMOT_OOXX_678m' a from dual union all
select 'k346_OOXX_OOXXOT_097m' a from dual
)select A
from test where substr(A, instr(A, 'OT_')-4, 4) = substr(A, instr(A, 'OT_') + 3, 4) -- format like 'kkkk_0B0EOT_0B0E_mmmm'
union
select A
from test where substr(A, instr(A, 'OT_')-4, 4) = substr(A, instr(A, 'OT_') -9, 4) -- format like 'kkkk_0B0E_0B0EOT_mmmm'
6540_0B0E_0B0EOT_sdgm
k346_OOXX_OOXXOT_097m
kkkk_0B0EOT_0B0E_mmmm
sdfg_OOXXOT_OOXX_678m
忘记给结果了。
test as
(
select 'kkkk_0B0EOT_0B0E_mmmm' a from dual union all
select '6540_0B0E_0B0EOT_sdgm' a from dual union all
select 'sdfg_OOXXOT_OOXX_678m' a from dual union all
select 'sdfg_OONMOT_OOXX_678m' a from dual union all
select 'k346_OOXX_OOXXOT_097m' a from dual
)select substr(regexp_substr(a,'[[:alnum:]]{4}OT',1,1),1,4) strfrom testwhere instr(regexp_replace(a,'[[:alnum:]]{4}OT',''),substr(regexp_substr(a,'[[:alnum:]]{4}OT',1,1),1,4))>0如果用个exists ,两层嵌套就能轻松解决,但是都不完美,一定会有个简单的办法,好像想复杂了