有一张表,字段存储类型为字符串,值为数字。直接使用order by排序,结果仍然是乱序。select * from table order by value;
id | Value |
---|---|
1 | 1 |
2 | 12 |
3 | 15 |
4 | 18 |
5 | 2 |
6 | 24 |
7 | 3 |
- 字符串转换数字的方法:(type: DECIMAL 浮点数,SIGNED 整数,UNSIGNED 无符号整数)
- CAST(value as type)
- CONVERT(value, type)
select * from table order by cast(value as signed);
select * from table order by convert(value, signed);
select * from table order by value * 1;
select * from table order by value + 0;
- 在Django ORM中使用:
Model.objects.filter().extra(select={'value': 'CAST(value AS SINGED)'}, order_by=['value'])
Model.objects.raw('原生SQL语句;')