Подстрока SQL Server без верхней границы - PullRequest
1 голос
/ 09 июля 2019

Как лучше всего в SQL Server сделать

SELECT 
    SUBSTRING('CATCH ME IF YOU CAN', 2, 10000)
    -- ATCH ME IF YOU CAN

без верхней границы?

Ответы [ 3 ]

5 голосов
/ 09 июля 2019

Вместо этого используйте STUFF ( STUFF (Transact-SQL) ):

SELECT STUFF('CATCH ME IF YOU CAN',1,1,'');

Здесь STUFF заменяет 1 символ, начиная с позиции 1, строкой '',Второй параметр - это начальная позиция, а третий - количество символов (из этой позиции), которые необходимо заменить.Четвёртое - это строка замены.

Итак, в качестве дальнейшего примера вы можете сделать что-то вроде этого:

SELECT STUFF('2019-07-09 11:38:00',11,1,'T');

Это заменит 1 символ из позиции 11 на символ 'T',который возвращает '2019-07-09T11:38:00', изменяя вышеуказанное значение на формат ISO8601.Как видите, длина заменяемой строки не обязательно должна быть такой же, как длина замещающей строки (фактически, третий параметр может иметь значение 0, что означает, что никакие символы не заменяются истрока «замена» просто вставляется в существующее значение).

2 голосов
/ 09 июля 2019

Использование LEN() с переменной

DECLARE @Val AS VARCHAR (MAX) = 'CATCH ME IF YOU CAN';
SELECT SUBSTRING(@Val, 2, LEN(@Val));

или напрямую с LEN()

SELECT SUBSTRING('CATCH ME IF YOU CAN', 2, LEN('CATCH ME IF YOU CAN'));
0 голосов
/ 09 июля 2019

Вы можете использовать функцию RIGHT() в сочетании с LEN().Все, что вам нужно сделать, это вычесть из LEN() количество символов, которые вы хотите исключить из начала строки:

SELECT RIGHT('CATCH ME IF YOU CAN', LEN('CATCH ME IF YOU CAN') - 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...