Использование подстроки с несколькими одинаковыми символами - PullRequest
0 голосов
/ 21 мая 2019

Я хочу использовать substring на сервере SQL для захвата строки между определенной текстовой строкой и следующим char(10). Проблема в том, что есть несколько вхождений char(10) в полной строке, поэтому мне нужен код для локализации первого char(10) после моей конкретной строки. Использование приведенного ниже кода приводит к ошибке из-за отрицательного значения (первый символ (10) появляется до my specific string).

SELECT SUBSTRING(col, LEN(LEFT(col, CHARINDEX ('my specific string', col))) + 1, LEN(col) - LEN(LEFT(col, 
    CHARINDEX ('my specific string', col))) - LEN(RIGHT(col, LEN(col) - CHARINDEX (char(10), col))) - 1);

Ошибка: неверный параметр длины передан в LEFT или SUBSTRING функция.

1 Ответ

3 голосов
/ 21 мая 2019

Очень простой ответ на конкретные данные в этом вопросе: вы можете передать третий параметр в вызов функции CHARINDEX, который ищет CHAR(10) после определенного начального индекса. В качестве третьего параметра вы можете передать индекс найденного вами 'my specific string':

SELECT SUBSTRING(col, LEN(LEFT(col, CHARINDEX ('my specific string', col))) + 1, LEN(col) - LEN(LEFT(col, 
    CHARINDEX ('my specific string', col))) - LEN(RIGHT(col, LEN(col) - CHARINDEX (char(10), col, CHARINDEX ('my specific string', col)))) - 1);

Однако я не уверен, что это решит вашу последнюю проблему. Возможно, ваш col не может содержать CHAR(10) после 'my specific string' ... Или он также может содержать несколько 'my specific string' с. Если вам нужна вся логика, которая обрабатывает ваши (более сложные) требования в одном операторе SELECT, все может очень быстро запутаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...