2015-11-27 4 views
1

мне нужно заказывать записи по дате (от новых к старым), где содержание столбца выглядит следующим образом:MySQL или Laravel Eloquent - заказ по

id | year 
------------- 
1 | 1Q 2000 
2 | 4Q 2000 
3 | 3Q 1999 
4 | 1Q 2002 

1Q, 2Q, 3Q, 4Q означает четверть. Мне нужно, чтобы получить результат:

id | year 
------------- 
4 | 1Q 2002 
2 | 4Q 2000 (4th quarter of 2000 is newest than 1 quarter of 2000) 
1 | 1Q 2000 
3 | 3Q 1999 
  1. Можно ли в MySQL?

  2. Возможно ли это в Laravel Eloquent -> orderBy()?

Спасибо, Уважения, Paul

+1

Предположительно вы размышляете разрывая год и квартал на две отдельные колонки, так что вы можете сделать это легкий путь? –

ответ

0

С MySQL вы можете использовать RIGHT, чтобы получить год часть первой, то вам необходимо заказать по year колонкам еще раз, чтобы получить правильную последовательность для нескольких кварталов с в том же году:

SELECT * 
FROM your_tab 
ORDER BY RIGHT(year, 4) DESC, year DESC -- LEFT(year, 1) DESC 

SqlFiddleDemo

+0

Отлично, спасибо! :) –

0

использование CAST или RIGHT

SELECT * 
FROM table 
ORDER BY CAST(RIGHT(year, 4) AS UNSIGNED) DESC,year DESC 
+0

Ваш код 'ORDER BY CAST (RIGHT (год, 4) AS UNSIGNED) DESC' не будет работать с несколькими кварталами в том же году. Проверьте [demo] (http://sqlfiddle.com/#!9/5c3b9f/2/0) – lad2025

+0

ВЫБЕРИТЕ * Из таблицы ЗАКАЗ BY CAST (ПРАВО (год, 4) НЕ ПОДЛЕЖИТ) DESC, год DESC –

Смежные вопросы