복붙노트

[SQL] PostgreSQL의 정렬

SQL

PostgreSQL의 정렬

나는 데이터 아래에 PostgreSQL을에 정렬 문제가있다 :

name
-----
@CF
@CG
CD
CE

나는 아래와 같은 이름으로 테이블 순서에서 결과를 선택 이름을 사용 :

name
-----
CD
CE
@CF
@CE

이 포스트 그레스 그냥 특수 문자를 무시하는 것 같다 @ 왼쪽 문자열을 정렬합니다. 그것은 다음과 같이 분류처럼 그러나, 나는 거라고 :

name
-----
@CF
@CG
CD
CE

인터넷을 검색하는 것은 도움이되지 않았다. 나는 희망 누군가가 여기에 제안을 줄 수 있습니다.

해결법

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

    1.사용의 PostgreSQL의 데이터 정렬 지원은 특정 데이터 정렬을 원하는 그것을 말할 수 있습니다.

    사용의 PostgreSQL의 데이터 정렬 지원은 특정 데이터 정렬을 원하는 그것을 말할 수 있습니다.

    주어진:

    CREATE TABLE t AS VALUES ('CD'),('CE'),('@CF'),('@CE');
    

    다음을 사용하여 바이트 현명한 정렬을 강제 할 수 있습니다 :

    SELECT * FROM t ORDER BY column1 COLLATE "C";
    

    은 "C"데이터 정렬 등, 인코딩, 국가의 언어 규칙을 무시 바이트 현명한 조합이다

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

    2.그냥 ORDER BY 절에 그 추가 :

    그냥 ORDER BY 절에 그 추가 :

    ORDER BY CASE WHEN LEFT(name,1) = '@' THEN 0 ELSE 1 END ASC, name ASC
    
  3. ==============================

    3.귀하의 비공개 데이터 정렬 설정은 분명히 정렬 순서에 @ 문자를 무시합니다. @Craig에 의해 제안 중 하나를 다른 데이터 정렬로 전환합니다. 당신은 문자열의 나머지 부분에 대한 데이터 정렬에 충실하려는 경우 또는, 선도를위한 특별한 경우를 추가 @.

    귀하의 비공개 데이터 정렬 설정은 분명히 정렬 순서에 @ 문자를 무시합니다. @Craig에 의해 제안 중 하나를 다른 데이터 정렬로 전환합니다. 당신은 문자열의 나머지 부분에 대한 데이터 정렬에 충실하려는 경우 또는, 선도를위한 특별한 경우를 추가 @.

    포스트 그레스에서 직접 부울 값으로 주문할 수 있습니다. 기본 순서는 FALSE, TRUE, NULL이다.

    ORDER BY name !~~ '@%', name
    

    ! ~~ Postgres의이 NOT LIKE에 대한 나타내는 표현이되고.

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

    4.이 옵션을 사용합니다 :

    이 옵션을 사용합니다 :

    SELECT name
          FROM table 
         ORDER BY name WHEN LEFT(name, 1) = '@' 
                       THEN 0 ELSE 1 END, name
    
  5. from https://stackoverflow.com/questions/20865552/postgresql-sort by cc-by-sa and MIT license