SQLITE 사용자 로케일 순으로 정렬 하기

SQLITE 사용자 로케일 순으로 정렬 하기

 

 

SQLITE에서 DB 테이블 조회 Order by 시 보통 아스키코드값에 의해 정렬이 된다.

 

오름차순으로 정렬 하는 경우 특수문자→영어→한글 이런 식으로 Ordering된다.

하지만 SQLITE에서는 COLLATE LOCALIZED 를 지원한다.

 

이것은 사용자의 주 언어가 가장먼저 정렬 되도록 해준다.

예를 들어 사용자가 주언어를 한국어로 설정 했다면 특수문자→한글→영어 순으로 정렬 된다는 것이다.

 

 

방법은 간단하다. Order by 절에 “COLLATE LOCALIZED” 키워드를 주면 된다.

String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

 

단, 한자나 일어가 썪여 있는 경우 한글사이에 끼어 버리는 경우도 있다.

이 부분에 대해서는 내부구조를 알아 보고 어떤 식으로 처리하느지 알아 봐야 할것같다.

 

 

 

이런 대안으로 sbustr()을 이용해서 직접 순서대로 불러 온다.

 

ORDER BY (CASE WHEN substr(name , 1, 1) BETWEEN 'ㄱ' AND '힣' THEN 1 
                           WHEN substr(name, 1, 1) BETWEEN 'A' AND 'Z' THEN 2
                           WHEN substr(name, 1, 1) BETWEEN 'a' AND 'z' THEN 2
                           ELSE 3 
                 END), 
                 name COLLATE LOCALIZED ASC