복붙노트

[SQL] "DISTINCT SELECT는"서로 다른 경우를 무시

SQL

"DISTINCT SELECT는"서로 다른 경우를 무시

내가 MSSQL Server 2000의 테이블에서 일부 고유 한 값을 선택해야한다는 문제가 (특정 열은 NVARCHAR 유형이다). 이 때로는 같은 값은,하지만 서로 다른 경우로, 예를 들어 (의사) :

SELECT DISTINCT * FROM ("A", "a", "b", "B")

반환

A,b

그러나 나는 희망을 (그리고 기대)

A,a,b,B

그들은 실제로 다른 값 때문이다.

어떻게이 문제를 해결하기 위해?

해결법

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

    1.데이터 정렬은 경우를 구분으로 설정됩니다.

    데이터 정렬은 경우를 구분으로 설정됩니다.

    당신이 뭔가를 할 필요가

    Select distinct col1 COLLATE sql_latin1_general_cp1_cs_as
    From dbo.myTable
    
  2. ==============================

    2.확실하지 MS SQL에 대한하지만, MySQL의 또는 포스트 그레스,이 작업에 사용 BINARY와. 과 같이 바이너리에 열 캐스트 :

    확실하지 MS SQL에 대한하지만, MySQL의 또는 포스트 그레스,이 작업에 사용 BINARY와. 과 같이 바이너리에 열 캐스트 :

    SELECT DISTINCT BINARY(column1) from table1;
    

    그냥 스키마에 따라 컬럼 1과 표를 변경합니다.

    다른 사람을 위해 작동합니다 MySQL은 5.7에서 나를 위해 작동 전체 예 :

    SELECT DISTINCT BINARY(gateway) from transactions;
    

    건배!

  3. ==============================

    3.

    SELECT DISTINCT
       CasedTheColumn 
    FROM
       (
       SELECT TheColumn COLLATE LATIN1_GENERAL_BIN AS CasedTheColumn
       FROM myTAble
       )FOO
    WHERE
       CasedTheColumn IN ('A', 'a'...)
    
  4. ==============================

    4.예를 들어, 어떤 바이너리에 문제의 컬럼의 정렬을 설정하십시오 UTF8 - 빈. 당신도 할 수있는 SELECT 문 자체 또는 (그것이 내부적으로 제대로 보관하기 때문에, 데이터 정렬을 쿼리가 실행될 때마다 매핑 할 필요가 없습니다 의미) 직접 테이블 구조를 변경하여.

    예를 들어, 어떤 바이너리에 문제의 컬럼의 정렬을 설정하십시오 UTF8 - 빈. 당신도 할 수있는 SELECT 문 자체 또는 (그것이 내부적으로 제대로 보관하기 때문에, 데이터 정렬을 쿼리가 실행될 때마다 매핑 할 필요가 없습니다 의미) 직접 테이블 구조를 변경하여.

  5. from https://stackoverflow.com/questions/2644851/select-distinct-ignores-different-cases by cc-by-sa and MIT license