Sqlite заказ от [символ] - [номер] - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть следующие записи в sqlite. Это поле id:

id
=====
B-1
B-2
B-10
B-11

Я бы хотел отсортировать как:

B-1
B-2
B-10
B-11

Но когда я сортирую, он сортируется как:

B-1
B-10
B-11
B-2

Это sql

select * from mytable
order by id

Как я могу его отсортировать как:

B-1
B-2
B-10
B-11

Все данные в формате:

[character]-[number]

1 Ответ

1 голос
/ 16 апреля 2020

Вы должны отсортировать таблицу сначала по строковой части идентификатора перед da sh, а затем по номеру после da sh. Таким образом, вам нужны строковые функции для извлечения строки и числовой части c столбца:

select * from mytable
order by 
  substr(id, 1, instr(id, '-')),
  substr(id, instr(id, '-') + 1) + 0

Оператор arithmeti c + принудительно выполнит неявное преобразование части числительного c строки в число. Смотрите демо . Если структура идентификаторов точно соответствует вашим образцам данных, и в начале всегда присутствует 1 буква, за которой следует da sh, а затем число, код можно упростить:

select * from mytable
order by
  substr(id, 1, 1),
  substr(id, 3) + 0 

Смотрите демо .

Результаты:

| id   |
| ---- |
| B-1  |
| B-2  |
| B-10 |
| B-11 |
...