Удалить все символы после определенного символа в PL / SQL - PullRequest
5 голосов
/ 10 октября 2011

Как получить подстроку из значения этого примера:

 john.abc_1234

Я хочу, чтобы она возвращала john.abc. Так что в основном нам нужно удалить всю информацию после _.

Дополнительные примеры: 1234_abc

Ответы [ 3 ]

18 голосов
/ 10 октября 2011

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

select substr('john.abc_1234', 1, instr('john.abc_1234', '_') -1)
from dual

Предупреждение: это гарантированно сработает, только если в вашей строке есть подчеркивание

Обновление

Кроме того, если вы работаете с Oracle 10g и дальше, вы можете выбрать путь Regex, который более эффективно обрабатывает исключения.

Вот несколько ссылок о том, как это сделать в Oracle:

1 голос
/ 20 августа 2015

Вы можете использовать это чудовище, когда вы не уверены, что все ваши значения содержат символ, в котором вы хотите обрезать строку.

SELECT
    (CASE WHEN INSTR(field, '_') > 0
        THEN substr(field, 1, instr(field, '_') -1)
        ELSE field
    END) AS field
FROM
    dual
0 голосов
/ 01 марта 2016

Этот парень понял это! http://programcsharp.com/blog/post/strip-non-numeric-characters-from-a-string-in-sql-server

SELECT
    (SELECT CAST(CAST((
        SELECT SUBSTRING(FieldToStrip, Number, 1)
        FROM master..spt_values
        WHERE Type='p' AND Number <= LEN(FieldToStrip) AND
            SUBSTRING(FieldToStrip, Number, 1) LIKE '[0-9]' FOR XML Path(''))
    AS xml) AS varchar(MAX)))
FROM
    SourceTable
...