Определить тип данных столбца в SQLite - PullRequest
6 голосов
/ 24 июня 2010

Я работаю над приложением для Android, где у пользователя есть разные варианты сортировки отображаемых данных, поступающих из базы данных. В настоящее время моя строка orderBy, которую я передаю методу query () в Android, выглядит следующим образом:

"LOWER("+columnName+") ASC"

Проблема в том, что если тип данных в столбце, заданном параметром columnName, является целочисленным, то при вызове LOWER () он будет отсортирован в алфавитном порядке, т.е. только на основе самой левой цифры, что, конечно, не имеет смысл для числовых данных. Следовательно, я хочу применять только LOWER (), если тип данных столбца не является целочисленным. Я имею в виду следующее утверждение:

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

Часть в скобках - это то, что я не знаю, как это сделать. Предоставляет ли SQLite функцию для определения типа данных столбца?

Ответы [ 3 ]

12 голосов
/ 24 июня 2010

Вы действительно хотите тип столбца или тип значения ? ( SQLite имеет динамическую типизацию , поэтому различие важно.)

Если вы хотите последнее, вы можете использовать typeof(columnName).

7 голосов
/ 24 июня 2010

Использование:

PRAGMA table_info(table-name);

для получения информации о таблице.

0 голосов
/ 24 июня 2010

Вы объявили столбец как целое число при настройке таблицы?В противном случае sqlite сохранит его в виде текста, и сортировки будут работать так, как вы описали.

create table if not exists exampletable (columnName integer);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...