복붙노트

[SQL] 어떻게 WHERE 절 (I SQL Server를 사용하고 있습니다)에서 대소 문자 구분 검색을 할까?

SQL

어떻게 WHERE 절 (I SQL Server를 사용하고 있습니다)에서 대소 문자 구분 검색을 할까?

내 SQL 쿼리의 대소 문자 구분 검색을 수행 할 수 있습니다. 그러나 기본적으로 SQL Server는 문자열의 경우를 고려하지 않습니다.

SQL 쿼리의 대소 문자 구분 검색을 수행하는 방법에 대한 어떤 생각?

해결법

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

    1.데이터 정렬을 변경을 통해 수행 할 수 있습니다. 기본적으로 사례를 구분하지 않습니다.

    데이터 정렬을 변경을 통해 수행 할 수 있습니다. 기본적으로 사례를 구분하지 않습니다.

    링크에서 발췌 :

    SELECT 1
    FROM dbo.Customers
    WHERE   CustID = @CustID COLLATE SQL_Latin1_General_CP1_CS_AS
        AND CustPassword = @CustPassword COLLATE SQL_Latin1_General_CP1_CS_AS
    

    또는 대소 문자로 열을 변경합니다.

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

    2.데이터 정렬을 사용하거나 다음과 같이 바이너리로 변환하여 :

    데이터 정렬을 사용하거나 다음과 같이 바이너리로 변환하여 :

    SELECT *
    FROM Users
    WHERE   
        Username = @Username COLLATE SQL_Latin1_General_CP1_CS_AS
        AND Password = @Password COLLATE SQL_Latin1_General_CP1_CS_AS
        AND Username = @Username 
        AND Password = @Password 
    

    사용자 이름 / 암호의 복제 엔진을 인덱스를 사용할 수있는 가능성을 제공하기 위해 존재한다. 데이터 정렬은 위의 소문자 구분 데이터 정렬, 필요한 경우 당신이 필요로하는 일에 변화이다.

    두 번째는, 바이너리 캐스팅, 다음과 같이 할 수있다 :

    SELECT *
    FROM Users
    WHERE   
        CAST(Username as varbinary(100)) = CAST(@Username as varbinary))
        AND CAST(Password as varbinary(100)) = CAST(@Password as varbinary(100))
        AND Username = @Username 
        AND Password = @Password 
    
  3. ==============================

    3.당신은 VARBINARY로 변환을 사용하여 쿼리를 만들 수 있습니다 - 그것은 매우 간단합니다. 예:

    당신은 VARBINARY로 변환을 사용하여 쿼리를 만들 수 있습니다 - 그것은 매우 간단합니다. 예:

    Select * from your_table where convert(varbinary, your_column) = convert(varbinary, 'aBcD') 
    
  4. ==============================

    4.사용 BINARY_CHECKSUM

    사용 BINARY_CHECKSUM

    SELECT 
    FROM Users
    WHERE   
        BINARY_CHECKSUM(Username) = BINARY_CHECKSUM(@Username)
        AND BINARY_CHECKSUM(Password) = BINARY_CHECKSUM(@Password)
    
  5. ==============================

    5.사용 HASHBYTES

    사용 HASHBYTES

    declare @first_value nvarchar(1) = 'a'
    declare @second_value navarchar(1) = 'A'
    
    if HASHBYTES('SHA1',@first_value) = HASHBYTES('SHA1',@second_value) begin
        print 'equal'
    end else begin
        print 'not equal'
    end
    
    -- output:
    -- not equal
    

    ...에서 where 절

    declare @example table (ValueA nvarchar(1), ValueB nvarchar(1))
    
    insert into @example (ValueA, ValueB)
    values  ('a', 'A'),
            ('a', 'a'),
            ('a', 'b')
    
    select  ValueA + ' = ' + ValueB
    from    @example
    where   hashbytes('SHA1', ValueA) = hashbytes('SHA1', ValueB)
    
    -- output:
    -- a = a
    
    select  ValueA + ' <> ' + ValueB
    from    @example
    where   hashbytes('SHA1', ValueA) <> hashbytes('SHA1', ValueB)
    
    -- output:
    -- a <> A
    -- a <> b
    

    또는 값을 찾을 수 있습니다

    declare @value_b nvarchar(1) = 'A'
    
    select  ValueB + ' = ' + @value_b
    from    @example
    where   hashbytes('SHA1', ValueB) = hasbytes('SHA1', @value_b)
    
    -- output:
    -- A = A
    
  6. ==============================

    6.당신의 SQL DB에 데이터 정렬로 Latin1_General_CS를 사용

    당신의 SQL DB에 데이터 정렬로 Latin1_General_CS를 사용

  7. ==============================

    7.MySQL의에서 당신은 정렬을 변경하려면 다음 그냥이 같은 바이너리 키워드를 사용하는 경우를 구분 검색을 수행하지 않으려면 :

    MySQL의에서 당신은 정렬을 변경하려면 다음 그냥이 같은 바이너리 키워드를 사용하는 경우를 구분 검색을 수행하지 않으려면 :

    SELECT * FROM table_name WHERE binary username=@search_parameter and binary password=@search_parameter
    
  8. ==============================

    8.

    select * from incidentsnew1 
    where BINARY_CHECKSUM(CloseBy) = BINARY_CHECKSUM(Upper(CloseBy))
    
  9. ==============================

    9.다른 사람이 말한대로, 당신은 대소 문자를 구분 검색을 수행 할 수 있습니다. 아니면 그냥 날로서 지정된 열의 정렬 형식을 변경합니다. 사용자에 대한 / 내 데이터베이스에 암호 열이 나는 다음과 같은 명령을 통해 조합으로 변경 :

    다른 사람이 말한대로, 당신은 대소 문자를 구분 검색을 수행 할 수 있습니다. 아니면 그냥 날로서 지정된 열의 정렬 형식을 변경합니다. 사용자에 대한 / 내 데이터베이스에 암호 열이 나는 다음과 같은 명령을 통해 조합으로 변경 :

    ALTER TABLE `UserAuthentication` CHANGE `Password` `Password` VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL;
    
  10. from https://stackoverflow.com/questions/1831105/how-to-do-a-case-sensitive-search-in-where-clause-im-using-sql-server by cc-by-sa and MIT license