2015-11-27 142 views
1

我需要一年订购的记录(从最新到最旧),其中列的内容是这样的:MySQL或Laravel雄辩 - 为了通过

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()?

谢谢 亲切的问候, 保罗

+1

想必你已经考虑打破了一年的季度成两个单独的列,所以你可以做这个简单的方法? –

回答

0

随着MySQL可以使用RIGHT首先得到一年的一部分,那么你需要通过year柱再一次到为了得到与多个季度正确排序同年:

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

SqlFiddleDemo

+0

非常好,谢谢! :) –

0

使用CASTRIGHT

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

您的代码'订购CAST(右(年份,4)无UNSIGNED)DESC'不会在同一年的多个季度工作。查询[demo](http://sqlfiddle.com/#!9/5c3b9f/2/0) – lad2025

+0

SELECT * FROM表 ORDER BY CAST(RIGHT(year,4)AS UNSIGNED)DESC,year DESC –