복붙노트

[SQL] SQL 대소 문자 구분 문자열 비교

SQL

SQL 대소 문자 구분 문자열 비교

당신은 어떻게 비교가 문자열의 각각의 경우가 아니라 동일한 경우에만 사실 너무 문자열을 비교 않습니다. 예를 들면 :

Select * from a_table where attribute = 'k'

... 'K'의 속성을 가진 행을 반환합니다. 나는이 동작을하지 않습니다.

해결법

  1. ==============================

    1.

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

    트릭을했다.

  2. ==============================

    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. ==============================

    3.쉽게 VARBINARY (최대 길이)에 열을 변환 할 수 있습니다, 길이는 당신이 결함이있는 비교를 피할 것으로 예상 최대해야합니다, 그것은 열 길이 설정 길이에 충분하다. 당신이 공간을 제외하고 실제 값을 비교하는 트림 열 도움 의미를 가지고 있으며, 여러분의 테이블 컬럼의 가치, 이것은 간단한 샘플입니다 그리고 당신은 내가 변환하고 비교 한 후 열 값을 잘라 내고 볼 수 있습니다 :

    쉽게 VARBINARY (최대 길이)에 열을 변환 할 수 있습니다, 길이는 당신이 결함이있는 비교를 피할 것으로 예상 최대해야합니다, 그것은 열 길이 설정 길이에 충분하다. 당신이 공간을 제외하고 실제 값을 비교하는 트림 열 도움 의미를 가지고 있으며, 여러분의 테이블 컬럼의 가치, 이것은 간단한 샘플입니다 그리고 당신은 내가 변환하고 비교 한 후 열 값을 잘라 내고 볼 수 있습니다 :

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

    이 도움을 바랍니다.

  4. ==============================

    4.또 다른 대안으로는 HASHBYTES,이 같은 것을 사용할 수 있습니다 :

    또 다른 대안으로는 HASHBYTES,이 같은 것을 사용할 수 있습니다 :

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

    5.당신은 BINARY로 속성을 정의하거나 검색을 수행 할 수 INSTR 또는 STRCMP를 사용할 수 있습니다.

    당신은 BINARY로 속성을 정의하거나 검색을 수행 할 수 INSTR 또는 STRCMP를 사용할 수 있습니다.

  6. from https://stackoverflow.com/questions/3969059/sql-case-sensitive-string-compare by cc-by-sa and MIT license