Вопрос

Как я могу сделать только числовой порядок, когда столбец содержит буквенно-цифровые символы в MySQL?

столбец (имя) — уникальное поле.

моя таблица содержит записи,

id  name
1   ab001
2   ab010
3   aa002
4   ac004
5   ba015
6   ba006
7   aa005
8   ac003

Результаты должны быть такими,

id  name
1   ab001
3   aa002
8   ac003
4   ac004
7   aa005
6   ba006
2   ab010
5   ba015

Когда я пытаюсь выполнить этот запрос Select * from test order by name, я получаю результаты только в алфавитном порядке.Как мне это получить?

Это было полезно?

Решение

Предполагая, что ваши струны всегда заканчиваются 3 цифрами, которые вы могли бы использовать RIGHT:

SELECT id, name
FROM Table1
ORDER BY RIGHT(name, 3);

Результат:

1, 'ab001'
3, 'aa002'
8, 'ac003'
4, 'ac004'
7, 'aa005'
6, 'ba006'
2, 'ab010'
5, 'ba015'

MySQL не имеет поддержки функциональные индексы, так что этот запрос будет относительно медленным. Было бы лучше перепроектировать вашу базу данных (например, сохранить число отдельно), чтобы упорядочение значения функции не было необходимым.

Другие советы

Я бы сделал это так:

select id, name from Table1 order by names + 0, names;

без заказы:

mysql> select * from alpha;
+---+-------+
| i | name  |
+---+-------+
| 1 | ab001 |
| 2 | ab010 |
| 3 | aa002 |
| 4 | cc001 |
| 5 | cb010 |
| 6 | aaa02 |
+---+-------+
6 rows in set (0.00 sec)

С моим запросом:

mysql> select i, name from alpha order by name + 0, name;
+---+-------+
| i | name  |
+---+-------+
| 3 | aa002 |
| 6 | aaa02 |
| 1 | ab001 |
| 2 | ab010 |
| 5 | cb010 |
| 4 | cc001 |
+---+-------+
6 rows in set (0.00 sec)

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

Я имел дело с одним столбцом varchar, который мог содержать любую информацию, но его нужно было правильно сортировать, независимо от того, что в нем находилось:

Итак, мой столбец может содержать такую ​​​​информацию, как:

AB CD EF GH

или

01 02 03 04

Ответ Ксавьера заставил его располагаться в алфавитном порядке, когда вся информация была алфавитной, или в числовом порядке, когда информация была числовой.

Спасибо

Спасибо!

Если у вас есть первые символы X в виде букв, а остальные в качестве чисел и альфа -символы различаются, вам гораздо лучше изменить свою структуру, чтобы поместить эти данные в два столбца - один для политических букв и один для чисел. Теперь вам не нужно делать коунверсии каждый раз, когда вы хотите заказывать, вы просто заказываете в столбцах буквы, а затем в цифровом столбце. Редизайн вашей структуры - это действительно лучший способ сделать это особенно, если вы будете заказывать часто или если у вас есть большой набор данных.

Вы можете даже покинуть текущее поле в качестве PK и получить триггер, разделенный на два новых поля. Таким образом, данные размещаются в формате, который можно заказать автоматически при введении или обновлении, весь текущий код все еще будет работать, но вы можете рефактор для использования более эффективных заказов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top