Объясните, где конечные пробелы и не игнорируются в 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 с другой стороны, включает их.

Другие вопросы по тегам