Упорядочение по первому алфавитному символу в столбце в MYSQL - PullRequest
4 голосов
/ 20 января 2010

Таблица в базе данных MYSQL содержит информацию об адресе, например ... add1, add2, add3, район, postalTown, страна

Заказ по почтовому городу обычно в порядке, но некоторые детали имеют номера в столбце postalTown. Например, 1420 Territet или 3100 Оверейсе. Это будет означать, что они появятся в верхней части над Абердином или Бристолем. Есть ли способ упорядочения по postalTown, но по первому алфавитному символу? Это означало бы, что порядок вышеизложенного будет следующим: Абердин, Бристоль, Оверэйсе, Территет

Спасибо

Ответы [ 4 ]

2 голосов
/ 20 января 2010

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

Редактировать: вместо регулярного выражения в вашей функции, в зависимости от формата данных, вы можете сделать 'substring_index' on '' (пробел) и вернуть индекс первого пробела, а затем вызвать substring, чтобы вернуть остаток строки после первый пробел.

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

order by yourfunctionname(postalTown)

Сохраненные функции

2 голосов
/ 20 января 2010

Напишите выражение, которое будет возвращать первый алфавитный символ, а затем просто упорядочить по [этому выражению]

  Order By substring(LTrim(
           Replace(Replace(Replace(Replace(Replace(
           Replace(Replace(Replace(Replace(Replace(
             colname, '1', ''),'2',''),'3',''),'4,''),'5', ''),
                      '6',''),'7',''),'8',''),'9',''),'0',''))
                   1,1)

Если вы хотите, чтобы строки сортировались по всему названию города, а не только по первому символу (как указано в заголовке вопроса), используйте это:

  Order By LTrim(
           Replace(Replace(Replace(Replace(Replace(
           Replace(Replace(Replace(Replace(Replace(
             colname, '1', ''),'2',''),'3',''),'4,''),'5', ''),
                      '6',''),'7',''),'8',''),'9',''),'0','')) 

Выше приведено предположение (я не пробовал), но идея состоит в том, чтобы сначала удалить все числовые символы из значения столбца, а затем взять первый символ из оставшегося.

Кроме того, если это работает, и если у вас есть какой-либо доступ к данным для разработки (по принципу СУХОЙ), я бы добавил вычисляемый столбец в эту таблицу (или отдельное представление для таблицы), который определен для используйте вышеприведенное выражение, чтобы это " извлечение " названия города было доступно для всего другого кода, который может захотеть получить к нему доступ, не копируя это выражение везде, где оно может вам понадобиться ..

1 голос
/ 20 января 2010

Создать представление на столе, сделать все необходимые переводы, а затем выполнить запрос к представлению?

1 голос
/ 20 января 2010

Первое, что мне приходит в голову, это сделать следующее в моем ORDER BY, очевидно, добавив числа от 0 до 9. Вы заметите, что дрянные схемы порождают дрянные решения. :) Как джентльмен Сказанное выше, вы, вероятно, должны подумать о редизайне того, как вы храните данные своего города.

ORDER BY REPLACE(REPLACE(REPLACE(FieldName, '1', ''),'2',''),'3','')  ETC.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...