Объясните, где конечные пробелы и не игнорируются в SQL Server.
Я считал, что конечные пробелы игнорируются в SQL везде, пока я не столкнулся со сценарием с PATINDEX, где они не игнорируются.
Случай 1: SELECT PATINDEX('qwerty', 'qwerty')
возвращает 1.
Случай 2:SELECT PATINDEX('qwerty', 'qwerty ')
возвращает 1. Конечный пробел, вставленный в конец второй строки, игнорируется.
Случай 3:SELECT PATINDEX('qwerty ', 'qwerty')
возвращает 0.
Почему он не игнорировал конечный пробел, вставленный в конце первой строки, как в случае 2?
1 ответ
Я считал, что конечные пробелы игнорируются в SQL везде
Нет, они не. Они игнорируются только для сравнения, вот и все. Так'mystring '
а также 'mystring'
будет рассматриваться так же в пункте WHERE 'mystring' = 'mystring '
.
Однако в таких вещах, как использование PATINDEX
.
Обратите внимание, что это задокументировано в LEN
функция, что конечные пробелы также игнорируются. DATALENGTH
с другой стороны, включает их.