반응형
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
반응형
'안드로이드 개발' 카테고리의 다른 글
안드로이드 앱 성능 최적화 - 1. 즉각적인 반응을 위한 StrictMode 사용 (0) | 2013.04.17 |
---|---|
GestureDetector 파헤치기 (0) | 2013.02.27 |
안드로이드 앱간의 bluetooth를 이용한 원격제어 (0) | 2012.10.20 |