在订单子句中使用+0

时间:2013-05-21 11:40:08

标签: mysql sql

我有一个“可用”列,它返回“是”或例如“30分钟”。 为了对此表进行排序,我们发现这是按预期工作的,首先是“是”,然后是“30分钟”。
order by available + 0 asc
即使这有效,我们也不知道为什么我们必须将+0放到列中。有人可以详细说明吗?

编辑:这是一个关于查询的示例
请注意,所有where子句都不在这里,而if(x为null)是在没有结果aka null值时返回的东西。

select distinct r.rname, if(b.stime is null, 'Yes', 'Yes') as available, r.mperson
from Rooms r left outer join Bookings b using (rname)
union all
select b.rname, concat(minute(timediff(b.etime, '$sdate')), ' min') as available,      r.mperson
from     Bookings b inner join Rooms r using(rname)
order by    available + 0 asc, rname asc

1 个答案:

答案 0 :(得分:3)

您将available值隐含地转换为数字,正如您可以通过尝试看到的那样

select "30 minutes" + 0; ==> returns 30
select "2 hours" + 0; ==> returns 2
select "yes" + 0; ==> returns 0

这会使"yes"(或任何不以数字开头的字符串)成为第一个返回值,而不是最后一个。

更一般地说,您总是应该定义您的模式,以便拥有精确的非多态字段。