Порядок SQL в алфавитном порядке без предшествующих нулей для чисел менее 10 - PullRequest
3 голосов
/ 07 января 2010

Можно ли сделать заказ в алфавитном порядке в mySQL следующим образом:

A1
A2
A3
A5
A10
A11
A20
A23
A24

К сожалению, заказ, который я получаю, упорядочен, как показано ниже. Обратите внимание, что любое число перед A10 не сгруппировано?

A1
A10
A11
A12
A2 A20
A23
A24
A3 A5

Примечание: Эти буквенно-цифровые строки на самом деле являются почтовыми индексами, поэтому я не могу поставить A01, потому что технически это не префикс почтового кода. Я также хотел бы, чтобы пользователь не вводил другие данные, чтобы система правильно их сортировала, потому что мои пользователи не очень разбираются в Интернете. Кроме того, эти буквенно-цифровые строки не смогут быть введены в базу данных в правильном порядке, поскольку они могут быть удалены и добавлены в любое время.

Ответы [ 4 ]

5 голосов
/ 07 января 2010

Создайте UDF, который преобразует ваш varchar в числовое значение. Затем используйте эту функцию в предложении ORDER BY вашего запроса.

По сути, ваша функция будет присваивать числовое значение каждой строке, что-то вроде значения ASCII A (или какой бы то ни было первой буквы) * 100 + анализируемый номер остальной части varchar.

3 голосов
/ 07 января 2010

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

...
ORDER BY SUBSTR(postalcode,2)+0
0 голосов
/ 07 января 2010

Порядок в алфавитном порядке.

Но вы хотите заказать их, как если бы они были числами. К сожалению, ASC и DESC не дают большой гибкости.

Моя копия Пола Дюбуа MySQL , New Riders, 2000 (сейчас немного устарела) гласит:

Начиная с MySQL 3.23.2, вы также можете указать выражение как сортировку колонка. Например, `ORDER BY RAND () возвращает строки в случайном порядке

Если эта функция все еще доступна, и вы можете найти встроенную функцию или приведение для преобразования varchar в целое число, возможно ли ORDER BY эту функцию? Или я читаю слишком много?

Хммм, я думаю, Билл Карвин выражает это лучше всего.

0 голосов
/ 07 января 2010

Одним из решений является точное определение формата почтового индекса и разбивка его на части. Допустим, это был штат, почтовый индекс: чтобы вы могли иметь NC27605. Затем вы можете сохранить состояние и zip_code отдельно, а почтовый индекс будет вычисленным значением. Тогда приведение их в порядок будет означать сортировку по состоянию, а затем zip_code.

Это всегда считается хорошим стилем; смысл базы данных в том, чтобы все независимые биты данных были независимо доступны.

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