@eldar_web

Как в SQL сделать сортировку по алфавиту исключая лишние слова?

Допустим, есть таблица Address с полей name.
Такие записи:
ул Белова
ул Алексея
ул Фадеева

Из-за того, что в начале присутствует 'ул' обычная сортировка по алфавиту ORDER BY name ASC не работает.
Как решить проблему?
  • Вопрос задан
  • 3024 просмотра
Пригласить эксперта
Ответы на вопрос 4
@BorisKorobkov Куратор тега MySQL
Web developer
Если нужно сортировать так, чтобы "улица Белова" и "проезд Белова" были рядом, то...
вариант 1: называть их "Белова улица" и "Белова проезд".
вариант 2: хранить в отдельных полях "улица"+"Белова" и "проезд"+"Белова". И сортировать по второму
Ответ написан
Комментировать
Flashter
@Flashter
Учусь программировать
Странно, что не работает, ведь сортировка в алфавитном порядке подразумевает сортировку по 4 символу, если первые три одинаковые...
Ответ написан
x67
@x67
Приведите к общему виду формат улицы.
Чтобы было ул. Академика и не было "ул Академика", "Ул. Академика" и тп. В pgsql для этого можно создать отдельные функции, используя целую кучу встроенных функций для работы с текстом. Как сделать это в mysql я не знаю, но я бы это для себя очень быстро реализовал бы на питоне с использованием форматирования и регулярок. После этого можно сортировать. Если там не только улицы, разделяете адрес на два поля. 1 поле - тип (улица, шоссе, переулок и тд), 2 поле - название (Академика Янгеля, Электродная, Парковый). Таким образом вы сможете как угодно сортировать эту таблицу.
Ответ написан
Комментировать
tsklab
@tsklab
Здесь отвечаю на вопросы.
Из-за того, что в начале присутствует 'ул' обычная сортировка по алфавиту ORDER BY name ASC не работает.Как решить проблему?
В лоб: удаляйте из названия "исключая лишние слова" и сортируйте. Или добавьте, или вычисляйте специальное поле для сортировки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы