2015-07-22 2 views
0

Я пытаюсь сортировать столбец через MySQL. Сорт должен быть восходящим для букв, но спускаться для чисел. Как это может быть немного запутанным, вот пример:SQL Order by Letters Ascending и Numbers Descending Same Column

данных для сортировки:

Access 2003 
Access 2007 
Access 2013 
Aliens 
Excel 2003 
Excel 2007 
Everybody is happy 
Powerpoint 2003 
Powerpoint 2007 

Становится

Access 2013 
Access 2007 
Access 2003 
Aliens 
Excel 2007 
Excel 2003 
Everybody is happy 
Powerpoint 2007 
Powerpoint 2003 

Также просто указать поля в вопросе будет следовать той же схеме как указано выше: название следует за годом после пробела. Поэтому, если это невозможно, используя встроенную функцию MYSQL. Можем ли мы разделить это поле на 2 поля после первого пространства и отсортировать по числу сначала, а затем по фактическому полю?

+4

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

+0

Это название курса, а не продукт. – Aasim

+0

Спасибо за разъяснение, но по вашему вопросу я бы порекомендовал разделить название курса и год/версию и оставить поле пустым для классов, которым не нужна информация года. – SaschaM78

ответ

0

Вы можете использовать этот код, чтобы разделить поле на два поля, а затем заказывать их по мере необходимости.

SELECT 
    SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 1), ' ', -1) AS string_name, 
    TRIM(SUBSTR(fullname, LOCATE(' ', fullname))) AS numberpart 
FROM table