【水蓝石】 mysql按与某个值的差距距离排序(使用cast)包含对cast理解

2020-11-27   449 次阅读


自己试出来的

select * from 中班课文综合 where 季度 = '寒假' order by cast(abs(4-讲次) as unsigned integer) limit 5;

但是

select * from 中班课文综合 where 季度 = '寒假' order by abs(4-cast(讲次 as unsigned integer)) limit 5;
# abs和4-从cast拿出来就不行了

中途用到了cast,在cast之内的字段(讲次)其实是varchar格式的数字,但是在cast内部将其加减,还是按int格式来结算的。

在cast内部也可以对字段进行操作,使用abs()来取4-讲次的绝对值,得到的就是与讲次相差多少,按相差多少来排序,就是以其某个距离来排序

以及cast()也是一个字段

cast(讲次 as unsigned integer) 本身也是一个字段格式
但是在内部可以对原字段操作,且操作的是字段内部的值

所以我在写django时甚至使用了

select * from 中班课文综合 where 季度 = '寒假' and cast(讲次 as unsigned integer)<=9 order by case when cast(讲次 as unsigned integer)= 5 then 0 else 1 end,cast(讲次 as unsigned integer) limit 4;

主要是

order by case when cast(讲次 as unsigned integer) = 5 then 0 else 1
# 这个的意思就是,如果讲次转换成int格式后数值等于5,就摆在最前面
# 作用就是使自己想要的数据放在最前面

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

无论在未来前做什么,未来都会普通的到来