Получить все до и после определенного персонажа - PullRequest
0 голосов
/ 17 июня 2020

Получить все до и после определенного символа в SQL

Мне нужна вторая строка после '_'.

Пример:

A_1234_BCD_8977_90888

Вывод:

1234

SQL Сервер 2016

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Вы можете использовать CHARINDEX и SUBSTRING здесь:

SELECT
    CASE WHEN col LIKE '%_%_%'
         THEN SUBSTRING(col,
                        CHARINDEX('_', col) + 1,
                        CHARINDEX('_', col, CHARINDEX('_', col) + 1) -
                            CHARINDEX('_', col) - 1)
         ELSE 'NA' END AS output
FROM yourTable;

Demo

Идея состоит в том, чтобы взять подстроку между первым и вторым подчеркиванием. CHARINDEX позволяет нам найти эти две позиции, затем нам нужно немного обработать числа, чтобы определить длину подстроки, которую нужно взять.

1 голос
/ 17 июня 2020

Иногда помогает JSON. Вы можете попытаться преобразовать введенный текст в действительный массив JSON (A_1234_BCD_8977_90888 в ["A","1234","BCD","8977","90888"]) и проанализировать этот массив с помощью OPENJSON(). С помощью этого приложения вы можете получить каждую часть входного текста по позиции:

Заявление:

DECLARE @position int = 2
DECLARE @text varchar(1000) = 'A_1234_BCD_8977_90888'

SELECT [value]
FROM OPENJSON(CONCAT('["', REPLACE(@text, '_', '","'), '"]'))
WHERE CONVERT(int, [key]) + 1 = @position

Результат:

1234

Обратите внимание, что STRING_SPLIT() - это здесь не вариант, потому что порядок не гарантированно соответствует порядку подстрок во входной строке.

...