mysql - 在 order 子句中使用 +0

标签 mysql sql

我有一个“可用”列,它返回"is"或例如“30 分钟”。 为了对该表进行排序,我们发现它按预期工作,其中"is"在前,“30 分钟”在后。
按可用 + 0 asc 排序
尽管这有效,但我们不知道为什么我们必须将 +0 放入该列。有人可以详细说明吗?

编辑:这是一个查询示例
请注意,所有 where 子句都不在此处,if(x is 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

最佳答案

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

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

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

确实改变了顺序,但这感觉很笨拙,而且效率低于使用纯数字字段(可以索引)。

更一般地说,您应该始终定义您的模式,例如具有精确的非多态字段。

关于mysql - 在 order 子句中使用 +0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16669123/

相关文章:

mysql - 使用第三方 API 更新 Google Cloud SQL 中的表

mysql - 比较多个表中的值的 SELECT 语句未返回正确的行

mysql - 我遇到 MySQL 约束问题

mysql - 数据库模式实用方法

mysql - 续集永远不会返回 utf-8,只是 ascii-8bit

mysql - 搜索日期 MySql

php - 查找两个用户之间的公共(public)列,如果没有则查找 null/0

mysql - 如何用年份和日期排序 SQL 结果?

mysql - 选择sql中在一个属性上具有最大值且小于另一属性的记录

mysql - 选择列作为行并对结果进行分组