字段 xm(varchar2) salary(varchar2)
小王 20
小张 300
小下 2000
查询条件: select salary from table_name odery by salary
结果:20
2000
300
希望结果:20
300
2000
都是varchar2的问题,请问怎样将其转化成 mumber 进行排序
select to_number(salary) from table_name odery by to_number(salary);
原因在于数据类型是varchar导致这样的排序结果,order by to_number(salary)即可。同意楼上
为何要使用varchar来存放数字呢?
造成不必要的类型转换问题。
------------------------
| |
| 相逢何必曾相识 |
| |
------------------------
odery by to_number(salary)
来晚了,楼上的都说那。
order by to_number(salary)
是啊,为什么要用varchar的字段来存放数字呢?
该说的都说了,不搀和了
这个数据库字段类型设计还是比较奇怪的
我刚刚也建了一帐类似的表,并插入类似的数据,但我的排序结果是正确的,并不需要order by to_number(salary)
你的记录有几个位数不同的数字吗?数据是否跟楼上一样?
字符排序是先按照首字母的顺序,在按照接着的字母排序,所以300会在4之前
select salary from table_name odery by to_number(salary);
原因乱在“空字符”,删除左右字符即可:
select salary from table_name odery by ltrim(rtrim(salary));
还是建议阁下把字段改为number类型吧。