Сравнение строк с учетом регистра SQL - PullRequest
185 голосов
/ 19 октября 2010

Как вы сравниваете строки так, чтобы сравнение было истинным, только если случаи каждой из строк также равны.Например:

Select * from a_table where attribute = 'k'

... вернет строку с атрибутом 'K'.Я не хочу такого поведения.

Ответы [ 5 ]

334 голосов
/ 19 октября 2010
Select * from a_table where attribute = 'k' COLLATE Latin1_General_CS_AS 

Сделал трюк.

40 голосов
/ 18 марта 2013

Вы также можете преобразовать этот атрибут как с учетом регистра , используя этот синтаксис:

ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CS_AS

Теперь ваш поиск будет с учетом регистра .

Если вы хотите сделать этот столбец без учета регистра снова, тогда используйте

ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CI_AS
25 голосов
/ 02 декабря 2014

Вы можете легко конвертировать столбцы в VARBINARY (максимальная длина), длина должна быть максимальной, которую вы ожидаете, чтобы избежать дефектного сравнения, достаточно установить длину в качестве длины столбца.Обрезать столбец поможет вам сравнить реальное значение, за исключением того, что пространство имеет значение и значение в столбцах таблицы. Это простой пример, и, как вы можете видеть, я обрезаю значение столбцов, а затем преобразую и сравниваю .:

CONVERT(VARBINARY(250),LTRIM(RTRIM(Column1))) = CONVERT(VARBINARY(250),LTRIM(RTRIM(Column2)))

Надеюсь, что это поможет.

14 голосов
/ 10 августа 2016

Точно так же вы можете использовать HASHBYTES, что-то вроде этого:

SELECT * 
FROM a_table 
WHERE HASHBYTES('sha1', attribute) = HASHBYTES('sha1', 'k')
4 голосов
/ 19 октября 2010

Вы можете определить attribute как BINARY или использовать INSTR или STRCMP для выполнения поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...