Как использовать условие IN в SQL Server при сравнении Varchars с конечными пробелами? - PullRequest
0 голосов
/ 08 ноября 2018

Вот пример проблемы:

SELECT 'True'
WHERE 'Hello      ' IN ('Hello', 'Goodbye', 'Hello  ')

В настоящее время это возвращает «True», потому что SQL игнорирует завершающие пробелы при сравнении VARCHAR.В этот связанный вопрос , это может быть решено с помощью LIKE, однако это не будет работать с условием IN.

Как я могу гарантировать, что сравнение учитывает конечные пробелы, в частности при использовании условия IN?

Редактировать: Мой список допустимых значений может включать элементы с конечными пробелами.Нужно сравнить точные значения по существу (то есть «Hello» не будет совпадать с «Hello»)

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Вы можете добавить непробельный символ в конце ваших поисковых запросов:

DECLARE @Terminator char(1) = '|';

SELECT 'True'
WHERE 'Hello      ' + @Terminator  IN ('Hello' + @Terminator , 'Goodbye' + @Terminator)

Это заставит сравнение учитывать конечные пробелы, сохраняя при этом все возможности поиска. (Я предполагаю, что вы хотите использовать столбцы слева или справа от оператора IN)

0 голосов
/ 08 ноября 2018

Я могу думать об этом решении на моей голове:

SELECT 'True'
WHERE reverse('Hello      ') IN (reverse('Hello'), reverse('Goodbye'))

В основном это заставляет сравнивать строку с помощью функции reverse.

Но приведенное ниже решение Zohar является наиболее ориентированным на производительность.

SELECT 'True'
WHERE 'Hello      '+'|' IN ('Hello'+'|', 'Goodbye'+'|')
0 голосов
/ 08 ноября 2018

Предполагая, что ваш список допустимых значений не имеет конечные пробелы, возможно, вы могли бы использовать:

SELECT 'True'
WHERE 'Hello      ' IN ('Hello', 'Goodbye') AND 'Hello      ' NOT LIKE '% '
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...