Как вы сравниваете строки так, чтобы сравнение было верным, только если случаи каждой из строк одинаковы. Например:
Select * from a_table where attribute = 'k'
... вернет строку с атрибутом 'K'. Я не хочу такого поведения.
Как вы сравниваете строки так, чтобы сравнение было верным, только если случаи каждой из строк одинаковы. Например:
Select * from a_table where attribute = 'k'
... вернет строку с атрибутом 'K'. Я не хочу такого поведения.
Ответы:
Select * from a_table where attribute = 'k' COLLATE Latin1_General_CS_AS
Сделал трюк.
Latin1_General_CS_AS
- это спецификация сопоставления. Сличение относится к набору правил, которые определяют, как данные сортируются и сравниваются. Смотрите эту страницу для получения дополнительной информации.
Вы также можете преобразовать этот атрибут с учетом регистра, используя этот синтаксис:
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
Вы можете легко конвертировать столбцы в VARBINARY (максимальная длина), длина должна быть максимальной, которую вы ожидаете, чтобы избежать дефектного сравнения, достаточно установить длину в качестве длины столбца. Обрезать столбец поможет вам сравнить реальное значение, за исключением того, что пространство имеет значение и значение в столбцах таблицы. Это простой пример, и, как вы можете видеть, я обрезаю значение столбцов, а затем преобразую и сравниваю .:
CONVERT(VARBINARY(250),LTRIM(RTRIM(Column1))) = CONVERT(VARBINARY(250),LTRIM(RTRIM(Column2)))
Надеюсь, это поможет.
В качестве другой альтернативы вы можете использовать HASHBYTES, что-то вроде этого:
SELECT *
FROM a_table
WHERE HASHBYTES('sha1', attribute) = HASHBYTES('sha1', 'k')