我需要使用regexp_substr,但不能正确使用
我在(l.id)列中有数字,例如:
1234567891123!123 EXPECTED OUTPUT: 1234567891123
123456789112!123 EXPECTED OUTPUT: 123456789112
12345678911!123 EXPECTED OUTPUT: 12345678911
1234567891123!123 EXPECTED OUTPUT: 1234567891123
我要在感叹号(!
)之前使用regexp_substr
SELECT REGEXP_SUBSTR(l.id,'[%!]',1,13) from l.table
可以吗?
答案 0 :(得分:3)
答案 1 :(得分:3)
您要删除感叹号和所有后续字符。就是这样:
select regexp_replace(id, '!.*', '') from mytable;
答案 2 :(得分:1)
像定界字符串一样看它,其中的bang是定界符,并且您想要第一个元素,即使它为NULL。确保测试所有可能性,甚至是意外的可能性(总是期待意外的结果)!这里的假设是,如果没有定界符,您会想要什么。
regex返回第一个元素,后跟爆炸或行尾。请注意,这种形式的正则表达式会处理NULL首个元素。
SQL> with tbl(id, str) as (
select 1, '1234567891123!123' from dual union all
select 2, '123456789112!123' from dual union all
select 3, '12345678911!123' from dual union all
select 4, '1234567891123!123' from dual union all
select 5, '!123' from dual union all
select 6, '123!' from dual union all
select 7, '' from dual union all
select 8, '12345' from dual
)
select id, regexp_substr(str, '(.*?)(!|$)', 1, 1, NULL, 1)
from tbl
order by id;
ID REGEXP_SUBSTR(STR
---------- -----------------
1 1234567891123
2 123456789112
3 12345678911
4 1234567891123
5
6 123
7
8 12345
8 rows selected.
SQL>
答案 3 :(得分:0)
如果我理解正确,这就是您想要的模式:
SELECT REGEXP_SUBSTR(l.id,'^[^!]+', 1)
FROM (SELECT '1234567891123!123' as id from dual) l
答案 4 :(得分:0)
如果您想使用REGEXP_SUBSTR
而不是regexp_replace
,则可以使用
SELECT REGEXP_SUBSTR(l.id,'^\d+')
假设您只有!
前的数字