Я работаю над приложением для Android, где у пользователя есть различные варианты для сортировки отображенных данных, которые прибывают из базы данных. В настоящее время моя строка orderBy, что я передаю запросу Android () метод, похожа на это:
"LOWER("+columnName+") ASC"
Проблема с этим состоит в том, что, если тип данных в столбце, указанном columnName, является целым числом, звоня НИЖЕ () на нем, заставит это быть отсортированным в алфавитном порядке, т.е. базирующимся только на крайней левой цифре, которая, конечно, не имеет никакого смысла для числовых данных. Следовательно я только хочу подать заявку НИЖЕ (), если тип данных столбца не является целым числом. То, что я имею в виду, является оператором как это:
"CASE WHEN [data type of columnName is integer] THEN "+columnName+" ASC ELSE LOWER("+columName+") ASC END"
Часть в скобках - то, что я не знаю, как сделать. SQLite обеспечивает функцию для определения типа данных столбца?
Вам действительно нужен тип столбца или тип значения? (SQLite является динамически-типизированным, поэтому это различие важно.)
Если вам нужен последний, вы можете использовать typeof(columnName)
.
Используйте:
PRAGMA table_info(table-name);
для получения информации о таблице.
Вы объявили столбец как целое число при настройке таблицы? В противном случае sqlite сохранит его как текст, и сортировка будет действовать так, как вы описали.
create table if not exists exampletable (columnName integer);