Oracle 特定字符前的 substr
Oracle substr before a specific character
我正在尝试获取 '_' 字符之前的字符串,我正在使用:
select SUBSTR('Lorik_1', 1, INSTR('Lorik_1','_') - 1) from dual;
这在这种情况下效果很好,但我想修改它以使用没有“_”的值。
select SUBSTR('Lorik', 1, INSTR('Lorik','_') - 1) from dual;
在这种情况下,它将输出 NULL,这对我不起作用!
我如何修改此查询,使其输出 'Lorik',但当出现“_”时,它将删除它及其后的字符串。
P.S。我不能使用 Case when statements
一个选项,使用REGEXP_SUBSTR
:
WITH yourTable AS (
SELECT 'Lorik_1' AS col FROM dual UNION ALL
SELECT 'Lorik' FROM dual
)
SELECT REGEXP_SUBSTR (col, '^[^_]+')
FROM yourTable;
这会为两列输出 Lorik
,请参阅此处的演示:
您可以使用
select regexp_substr('Lorik','[^_]+')
from dual;
仅包括 [^_]+
模式。
您还可以使用 regexp_replace()
到 trim 第一个下划线(包括在内)之后的所有内容:
regexp_replace(mycol, '_.*$', '')
with t as (
select 'lorik_1' as mycol from dual
union all select 'lorik' from dual
)
select regexp_replace(mycol, '_.*$', '') from t;
| REGEXP_REPLACE(MYCOL,'_.*$','') |
| :------------------------------ |
| lorik |
| lorik |
我正在尝试获取 '_' 字符之前的字符串,我正在使用:
select SUBSTR('Lorik_1', 1, INSTR('Lorik_1','_') - 1) from dual;
这在这种情况下效果很好,但我想修改它以使用没有“_”的值。
select SUBSTR('Lorik', 1, INSTR('Lorik','_') - 1) from dual;
在这种情况下,它将输出 NULL,这对我不起作用!
我如何修改此查询,使其输出 'Lorik',但当出现“_”时,它将删除它及其后的字符串。
P.S。我不能使用 Case when statements
一个选项,使用REGEXP_SUBSTR
:
WITH yourTable AS (
SELECT 'Lorik_1' AS col FROM dual UNION ALL
SELECT 'Lorik' FROM dual
)
SELECT REGEXP_SUBSTR (col, '^[^_]+')
FROM yourTable;
这会为两列输出 Lorik
,请参阅此处的演示:
您可以使用
select regexp_substr('Lorik','[^_]+')
from dual;
仅包括 [^_]+
模式。
您还可以使用 regexp_replace()
到 trim 第一个下划线(包括在内)之后的所有内容:
regexp_replace(mycol, '_.*$', '')
with t as (
select 'lorik_1' as mycol from dual
union all select 'lorik' from dual
)
select regexp_replace(mycol, '_.*$', '') from t;
| REGEXP_REPLACE(MYCOL,'_.*$','') | | :------------------------------ | | lorik | | lorik |