Oracle substr перед указанным c символом - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь получить строку перед символом '_', я использую:

select SUBSTR('Lorik_1', 1, INSTR('Lorik_1','_') - 1) from dual;

Это прекрасно работает для этого случая, но я хочу изменить его для работы со значениями, которые не have '_'.

select SUBSTR('Lorik', 1, INSTR('Lorik','_') - 1) from dual;

В этом случае он выдаст NULL, и это не работает для меня!

Как я могу изменить этот запрос, чтобы он выводил 'Lorik', но когда присутствует '_', он удалит его и строку после него.

PS Я не могу использовать Case, когда операторы

Ответы [ 3 ]

1 голос
/ 29 января 2020

Вы можете использовать

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

, включая только шаблон [^_]+.

Демо

1 голос
/ 29 января 2020

Вы также можете использовать regexp_replace(), чтобы обрезать все после первого подчеркивания (входит в комплект):

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

Демонстрация на 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                           |
1 голос
/ 29 января 2020

Один вариант, используя 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 для обоих столбцов, см. Демонстрацию здесь:

Демо

...