Вопрос сортировки SQLite - PullRequest
       1

Вопрос сортировки SQLite

0 голосов
/ 06 декабря 2010

Я использую БД SQLite в своем приложении для Android.

В столбце есть числа и строки.Что-то вроде:

3, 1, 2, 6 / 6A, X, 3A, 10, 12, XY, 44, ZW

Если я выберу значения этого столбца и отсортирую их, яget:

1, 10, 12, 2, 3, 3A, 44, 6 / 6A, X, XY, ZW

Есть ли возможность в SQLite отсортировать эти значения так, чтобы я получил:

1, 2, 3, 3A, 6 / 6A, 10, 12, 44, X, XY, ZW

Спасибо,

Мур

Ответы [ 3 ]

1 голос
/ 06 декабря 2010

После многих экспериментов у меня есть правильный запрос:

select _id, case 
when cast(_id as number) = 0 then _id
when cast(_id as number) <>0 then cast(_id as number)
end as sorting
from lines
order by sorting

Хорошо, что операция приведения возвращается на 6 / 6A назад.

UPD

Не знаю почему, но если я использую этот запрос в своем приложении для Android, я получаю столбец _id в качестве числа, поэтому я должен выполнить приведение к тексту

select cast(_id as text) as _id, case 
when cast(_id as number) = 0 then _id
when cast(_id as number) <>0 then cast(_id as number)
end as sorting
from lines
order by sorting
1 голос
/ 06 декабря 2010

Вы можете сортировать чистые числа и чистые строки по своему желанию, просто сохраняя числа в виде чисел (в настоящее время вы храните все в виде строк).

Гибриды (3A и 6A) сложнее,Один из вариантов - извлечь числовой префикс и сохранить его в столбце сортировки (вместе с другими неизмененными значениями):

original sort
   1      1
   2      2
   6A     6
   6      6
   3A     3
   X      X
   XY     XY

Затем упорядочить по столбцу сортировки, за которым следует исходный столбец:

SELECT * FROM MyTable
 ORDER BY sort, original
0 голосов
/ 15 января 2016

Вдохновленный решениями Тимы и Марсело Кантоса, я нашел следующее решение:

SELECT * FROM MyTable ORDER BY CAST(original AS INTEGER), original;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...