我正在尝试从字符串值中找到一个字母数字8字符。例如:如果我的字符串是//SC202646 ABCBUB22XXX
,则它应该提取ABCBUB22
或满足8个字母数字字符长度的条件的任何值。
我正在通过sql执行它,并想使用regex函数将其提取
答案 0 :(得分:0)
您可以使用下面的查询来获取结果。看起来有点复杂,但是可以正常工作。
select regexp_substr(sub1, '[A-Za-z0-9]{8}', 1)
from (select regexp_substr('<input the string here >', '[^ ]+', 1, level) sub1 from dual
connect by level <= REGEXP_COUNT('< input the string here >', '[^ ]+'))
where regexp_count(sub1,'[^a-zA-Z0-9]')=0 AND regexp_count(sub1,'[a-zA-Z0-9]')>=8;
请考虑以下示例。
测试字符串为:// SC202646 ABCBUB22XXX ASFD1234 qwer // s aaddf123456
首先在内部查询中,我们根据空格分隔每个单词。内部查询的结果是
select regexp_substr('//SC202646 ABCBUB22XXX ASFD1234 qwer//s aaddf123456 ', '[^ ]+', 1, level) sub1 from dual
connect by level <= REGEXP_COUNT('//SC202646 ABCBUB22XXX ASFD1234 qwer//s aaddf123456 ', '[^ ]+');
结果:
//SC202646
ABCBUB22XXX
ASFD1234
qwer//s
aaddf123456
然后在外部查询中,我们对数据进行过滤,使其仅应包含字母数字字符,并且至少应包含8个字符,然后显示前8个字符。
所以最终的查询和输出是
select regexp_substr(sub1, '[A-Za-z0-9]{8}', 1)
from (select regexp_substr('//SC202646 ABCBUB22XXX ASFD1234 qwer//s aaddf123456 ', '[^ ]+', 1, level) sub1 from dual
connect by level <= REGEXP_COUNT('//SC202646 ABCBUB22XXX ASFD1234 qwer//s aaddf123456 ', '[^ ]+'))
where regexp_count(sub1,'[^a-zA-Z0-9]')=0 AND regexp_count(sub1,'[a-zA-Z0-9]')>=8;
结果:
ABCBUB22
ASFD1234
aaddf123