[MYSQL]让字符串类型的数字按照正确的姿态排序

1218 查看

今天排序遇到了个问题,如果数据类型是 varchar 的数字,在排序的过程中,出来并不是我们想要的效果。
例如:

sqlselect * from table order by field_varchar ;
field_varchar
0
1
11
100
2
22
3
33

在网上查找了一圈,比较常见的做法是:

sqlselect * from table order by field_varchar+0;

转换为数字

field_varchar
0
1
2
3
11
22
33
100

点进来看的都是有求知欲的,所以对的,故事还没有完。
如果 这个字段里面有 空字符窜 或者 null。上面的方法还不够完美。

会出现下面的情况

field_varchar
0
空
1
2
3
11
22
33
100

因为空字符窜+0 是0, 0+0 也是0 ,这个时候就会出现不稳定的 0 和空 上下跳动的情况。
那么真正正确的姿态是怎么样的呢?

请看大屏幕

sqlselect * from table order by length(field_varchar),field_varchar;