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