2014-12-02 3 views
1

Привет есть результат, который возвращает следующиеMysql Заказывайте где буквенно-цифровой

ORDER BY ProductCode ASC  

CU522-15 
CU522-17 
CU522-18 
CU522-19 
CU522-4 

Я пытаюсь получить cu522-4 быть первым и не последним. Я не могу изменить ProductCode, поскольку он должен соответствовать другой системе. Любые идеи?

ответ

2

Попробуйте с

SELECT * FROM `mytable` ORDER BY LENGTH(ProductCode), ProductCode 

CU522-4 будет первым, потому что она имеет меньше символов

Остальные будут отсортированы обычно

+0

Отлично! Работает «универсально» со всеми кодами продуктов –

3

Отправляясь на предположении, что всегда «-» это должно работать:

SELECT * 
FROM  table 
ORDER BY CAST(SUBSTRING(ProductCode,LOCATE('-',ProductCode)+1) AS SIGNED) 

Используйте ПОЗИЦИЯ, чтобы найти «-», SUBSTRING, чтобы захватить номер после него, и CAST, чтобы сделать его сопоставимое значение.

+0

Большое спасибо, это работает! –

+0

@ZaidKajee :) ... – amit

0

В случае, если ваш префикс код продукта не всегда такой же длины, вы можете сделать:

order by substring_index(ProductCode, '-', 1), 
     substring_index(ProductCode, '-', -1) + 0; 

+ 0 выполняет цифровое преобразование значения, которое вы хотите для сортировки.