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,请参阅此处的演示:

Demo

您可以使用

select regexp_substr('Lorik','[^_]+') 
  from dual;

仅包括 [^_]+ 模式。

Demo

您还可以使用 regexp_replace() 到 trim 第一个下划线(包括在内)之后的所有内容:

regexp_replace(mycol, '_.*$', '')

Demo on DB Fiddle:

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                           |