2017-01-16 318 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;