Як ви порівнюєте рядки, щоб порівняння було істинним, лише якщо випадки кожної з рядків також рівні. Наприклад:
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')