CodeEager Ответов: 1

Как я могу использовать order by в mysql?


Я использую order by в select query
любить
select emp_id,emp_nm from emp order by emp_id asc


но проблема в том, что полученный результат по запросу является:
идентификатор emp_id | emp_nm
E1 | A
E10 | B
E11 | C
E2 | D
E3 | E
E4 | F

Но, я хочу вот так:
идентификатор emp_id | emp_nm
E1 | A
E2 | B
E3 | C
Е10 | Д
Е11 | Е

Возможно ли это в sql?

Что я уже пробовал:

Я использую order by в select query
любить
select emp_id,emp_nm from emp order by emp_id asc

1 Ответов

Рейтинг:
11

OriginalGriff

Это происходит потому, что вы заказываете по количеству строк, а порядок строк определяется первым различным символом между двумя строками. В вашем случае E2 идет после E1, E10 и E11, потому что первый другой символ - это "2" в одной строке и "1" в другой: поскольку " 1 "идет перед" 2 "в наборе символов, все строки, начинающиеся с "E1", будут идти перед всеми строками, начинающимися с " E2 " - остальные символы вообще не рассматриваются.

Вы не можете обойти это, или не легко, потому что это то, как работают строки!
Есть три вещи, которые вы можете сделать:
1) дополните свой идентификатор ведущими нулями:

E01 | A
E10 | B
E11 | C
E02 | D
E03 | E
E04 | F 

2) Используйте вычисляемый столбец, чтобы получить префикс символа и целочисленное число: Сгенерированные столбцы в MySQL 5.7.5 | блог MySQL Server[^]
3) Напишите функцию для разделения вашего идентификатора, преобразуйте числовую часть в число и используйте ее для заказа.
- Я? Я не использую "смешанные" идентификаторы именно по этой причине!


CodeEager

Хорошо,сэр, я понял

Я выберу первый, потому что это будет легко для меня.
Спасибо.

OriginalGriff

Всегда пожалуйста!