场景:
对于数据库中某个varChar类型字段进行排序
这个字段的值是任意的,可以是只有数字,数字+汉字,字母+汉字,汉字等等
方法实现:
select id, name
from table1
where sta = '1'
order by case when name + 0 > 0 then 0 else 1 end asc,
name+0 asc, convert(name USING GBK) asc;
第一个排序:
case when name + 0 > 0 then 0 else 1 end
是将数字+汉字类型的name 转义成0 ,其他类型的name转义为1
对于全部的0没有进行内部排序,对于全部的1 没有进行内部排序
第二个排序:
name+0
将数字+汉字类型的进行内排序,
– 例如 11号,1号,2号很好,23号楼等,会被转为数值 11,1,2,23 排序 1,2,11,23
第三个排序:
convert(name USING GBK)
对于所有的1 进行内部按照首字母排序