自己试出来的
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.
Comments | 0 条评论