order by函数跟的字段中数据是小数,出现排序错误,请指点

代码: $sql1="select * from qscinfo2 where testdate =$datey order by zzcj desc";按照zzcj进行排序。
错误样式:
结果6.2222的竟然比12.333大,只要是小数点前是一位数的都比两位数的大,我感觉好像是它没有识别这是个数字是按文本排的,请高手指导下,
数据库样式:

如果是系统来排会是:2.196680>13.138409.
如果是数据类型的问题,我想不改数据库,通过改最上边的代码能修正这个错误吗。
比如 $sql1="select * from qscinfo2 where testdate =$datey order by value(zzcj) desc";这样。但我这个现实是错误的写法。

第1个回答  2013-11-25
如果你的zzcj 是字符型,试试这句
$sql1="select * from qscinfo2 where testdate =$datey order by (zzcj+0) desc"追问

不行啊。这样写是提示错误的。

追答

把错误贴上来,还有你数据类型是什么?

追问

错误是写上这句,我提问那个表就不出图像了。数据类型我在数据库定义的是varchar,但实际录入的数据格式应该是类似10.1213、3.4454这种浮点函数。

追答

直接上图,结果出来了,图不出来不是sql语句的问题 

本回答被提问者采纳
第2个回答  2013-11-25
恋米无言的回答可以实现你的效果。不过一般数值型字段不用varchar,用decimal就不会有这种情况追问

恋米无言的回答不行,我不想改变数据库,能用代码转换成数字格式吗

第3个回答  2013-11-25
order by cast(cczj as decimal) desc追问

这是个错误语句啊

追答

费劲,我只写了order by子句,你自己不会整齐了?
select * from qscinfo2 where testdate =$datey order by cast(zzcj as decimal) desc

追问

这样改我的图表不出图像,我也是这个全部写的,但是不知道什么原因。

追答

你把 sql拷到数据库的客户端扫行一下就知道sql是否正确了,出不出来图像那跟你的程序有关,可能你的程序有问题呗

相似回答