使用 REGEXP_SUBSTR 获取子字符串
Get substring with REGEXP_SUBSTR
我需要使用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
可以吗?
如果我没理解错的话,这就是你想要的模式:
SELECT REGEXP_SUBSTR(l.id,'^[^!]+', 1)
FROM (SELECT '1234567891123!123' as id from dual) l
您可以尝试使用 INSTR() and substr()
select substr(l.id,1,INSTR(l.id,'!', 1, 1)-1) from dual
您想删除感叹号和它后面的所有字符。那就是:
select regexp_replace(id, '!.*', '') from mytable;
如果你喜欢使用 REGEXP_SUBSTR
而不是 regexp_replace
那么你可以使用
SELECT REGEXP_SUBSTR(l.id,'^\d+')
假设您只有 !
之前的数字
将其视为分隔字符串,其中爆炸是分隔符,您需要第一个元素,即使它是 NULL。确保测试所有的可能性,甚至是意想不到的(总是期待意想不到的)!这里的假设是,如果没有定界符,你会想要那里的东西。
正则表达式 returns 第一个元素后跟一个 bang 或行尾。请注意,这种形式的正则表达式处理 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>
我需要使用regexp_substr,但我无法正常使用
我有列 (l.id) 和数字,例如:
1234567891123!123 EXPECTED OUTPUT: 1234567891123
123456789112!123 EXPECTED OUTPUT: 123456789112
12345678911!123 EXPECTED OUTPUT: 12345678911
1234567891123!123 EXPECTED OUTPUT: 1234567891123
我想在感叹号 (!
)
SELECT REGEXP_SUBSTR(l.id,'[%!]',1,13) from l.table
可以吗?
如果我没理解错的话,这就是你想要的模式:
SELECT REGEXP_SUBSTR(l.id,'^[^!]+', 1)
FROM (SELECT '1234567891123!123' as id from dual) l
您可以尝试使用 INSTR() and substr()
select substr(l.id,1,INSTR(l.id,'!', 1, 1)-1) from dual
您想删除感叹号和它后面的所有字符。那就是:
select regexp_replace(id, '!.*', '') from mytable;
如果你喜欢使用 REGEXP_SUBSTR
而不是 regexp_replace
那么你可以使用
SELECT REGEXP_SUBSTR(l.id,'^\d+')
假设您只有 !
将其视为分隔字符串,其中爆炸是分隔符,您需要第一个元素,即使它是 NULL。确保测试所有的可能性,甚至是意想不到的(总是期待意想不到的)!这里的假设是,如果没有定界符,你会想要那里的东西。
正则表达式 returns 第一个元素后跟一个 bang 或行尾。请注意,这种形式的正则表达式处理 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>