From Substring Documentation:
Синтаксис для подстроки:
SUBSTRING (expression ,start , length)
старт
Является выражением integer или bigint, которое указывает, где начинаются возвращенные символы. Если значение начала меньше 1, возвращаемое выражение будет начинаться с первого символа, указанного в выражении. В этом случае количество возвращаемых символов является наибольшим значением либо суммы начала + длины-1, либо 0. Если начало больше числа символов в выражении значения, возвращается выражение с нулевой длиной.
длина
является положительным целым числом или BIGINT выражение, которое определяет, как будут возвращены многие символы выражения. Если длина отрицательная, генерируется ошибка и оператор завершается. Если сумма начала и длины больше, чем число символов в выражении, значение выражения в целом, начиная с начала возвращается
Теперь приходя на ваш вопрос ..
SELECT SUBSTRING('ab,', 0, LEN('ab,')) -- why?
---start at zero and get values till whatever count of `LEN('ab,')` this returns
SELECT SUBSTRING('ab,', -1, LEN('ab,') + 1) -- why?
--We know if start is negative,substring starts at 0 from above documentation
SELECT SUBSTRING('ab,', -2, LEN('ab,') + 2) -- why?
--We know if start is negative,substring starts at 0 from above documentation
когда использовать отрицательный Substring:
Как вы можете видеть, это не имеет значения, когда вы используете отрицательное начало или ноль, SQL всегда будет начинаться с 0
в обоих случаях ..
Есть нет случаев использования, я могу думать, когда поведение specnying отрицательной длины полезно.
это может быть добавлено в документацию, так как несколько раз, когда мы хотим добавить длину начала динамически и указать что-то вроде ниже. .
CHARINDEX('somesearchitem', 'Expression, 5)-10
выше выражение несколько раз приведет к отрицательным значениям, в этом случае SQL начнет запуск выражения в отличие от выбрасывания ошибки, как в случае длины
Да документировано поведение. Но полезно ли это поведение? Имеет ли смысл использовать его? –
@ AnthonyFaull: я не вижу никаких вариантов использования, так как оба они одинаковы – TheGameiswar
Согласен. Спасибо за Ваш ответ. –