SQL Case Sensitive String Сравнить

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

Select * from a_table where attribute = 'k'

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

Ответы

Ответ 1

Select * from a_table where attribute = 'k' COLLATE Latin1_General_CS_AS 

Сделал трюк.

Ответ 2

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

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

Ответ 3

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

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

Надеюсь на эту помощь.

Ответ 4

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

SELECT * 
FROM a_table 
WHERE HASHBYTES('sha1', attribute) = HASHBYTES('sha1', 'k')

Ответ 5

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

Ответ 6

Select * from a_table where attribute @@ 'k'

Ответ 7

если вы используете навигатор oracle sql, вы можете использовать;

Select * from a_table where attribute = UPPER('k')

если вы хотите вернуть строку с атрибутом "K" и "k". Вы можете использовать;

Select * from a_table where UPPER(attribute) = UPPER('k')