2010-06-23 3 views
5

사용자가 데이터베이스에서 제공되는 표시된 데이터를 정렬하기위한 다양한 옵션을 가지고있는 Android 앱에서 작업하고 있습니다. 현재 내 해 orderBy 문자열 나는 ​​() 메소드는 다음과 같습니다 안드로이드 쿼리에 전달한다 :SQLite에서 열의 데이터 유형 결정

"LOWER("+columnName+") ASC" 

이 가진 문제는 COLUMNNAME에 의해 지정된 열의 데이터 형식이 그것에 정수 (LOWER 호출을) 인 경우 것 알파벳순으로 정렬하게합니다. 즉 숫자 데이터에 대해 아무런 의미가없는 가장 왼쪽 숫자 만 기반으로합니다. 따라서 열의 데이터 형식이 정수가 아닌 경우에만 LOWER()를 적용하려고합니다. 제가 생각 하기로는 다음과 같은 진술이 있습니다 :

"CASE WHEN [data type of columnName is integer] THEN "+columnName+" ASC ELSE LOWER("+columName+") ASC END" 

괄호 안의 부분은 어떻게 해야할지 모릅니다. SQLite는 열의 데이터 유형을 결정하는 함수를 제공합니까?

답변

10

의 유형 또는 값의 유형을으로 지정 하시겠습니까? (SQLite is dynamically-typed이므로 구분이 중요합니다.)

typeof(columnName)을 사용할 수 있습니다.

+0

제 경우에는별로 중요하지 않습니다. 값의 유형은 C 럼의 유형과 일치해야합니다. 따라서 typeof (columnName)는 완벽하게 작동해야합니다. 고맙습니다. –

0

테이블을 설정할 때 열을 정수로 선언 했습니까? 그렇지 않으면 sqlite가 텍스트로 저장하고 정렬은 사용자가 설명한대로 작동합니다.

create table if not exists exampletable (columnName integer); 
+0

예, 숫자 열을 정수로 선언했습니다. 그리고 LOWER()에 대한 호출을 제거하면 정수 열이 원하는대로 정렬됩니다. 하지만 LOWER() 호출은 텍스트 열을 정렬하려는 이유 때문에 거기에 이유가 있습니다. –

6

사용 :

PRAGMA table_info(table-name); 

테이블 정보를 얻을 수 있습니다.