2017-01-16 61 views
0

我有數據類型爲varbinary的月和年的列。如何在MySQL中按月份,年份排序?

我想:

SELECT * FROM traffic 
WHERE '2015'<= year AND year <='2015' 
    AND NOT (
     (2015= year AND month <05) OR 
     (2015= year AND month >11) 
    ) ORDER BY Year, month; 

輸出是:

month 
10 
11 
5 
6 
7 
8 
9 

,但我想

month 
5 
6 
7 
8 
9 
10 
11 

我能做些什麼,以獲得預期的輸出?

+0

列數據類型? (不要將日期/時間值存儲在varchar中,使用適當的數據類型。) – jarlh

+0

month + 0就足夠了,但也許將整數存儲爲整數 – Strawberry

回答

1

試試這個,

select * from traffic 
WHERE '2015'<= year AND year <='2015' 
    AND NOT (
     (2015= year AND month <05) OR 
     (2015= year AND month >11) 
    ) ORDER BY Year * 1,month * 1; 

* 1將字符串數據類型轉換成整數一個月。

+0

謝謝你這麼多SIr – khush

+0

歡迎!如果我的答案解決了你的問題,你可以接受我的答案。 – rahulsm

+2

@khush我一直在看你的個人資料,你永遠不會接受答案。請花時間在正確答案左側標記(V),以便回答您的​​人將獲得他們的獎勵。 – sagi

2

您需要每月串投轉換成int

order by cast(month as unsigned) 
+0

另外,添加ASC以使其從最小到最大: order by cast月作爲無符號)ASC –

+4

@OriNachum'ASC'是默認排序,不需要寫下來。 – sagi

0

我的建議是的yearmonth數據類型更改爲INT表本身,因爲它沒有任何好處,當它存儲在VARCHAR,然後運行你自己的代碼,它會返回預期的結果,而不做改變

ALTER TABLE <tablename> MODIFY <columnname> INT UNSIGNED;