如何按升序对这些数据进行排序?

时间:2013-10-04 06:24:28

标签: mysql sql

尝试按升序排序从数据库中检索数据。

我的查询是

select pid 
from `patient_list` t1, patient_info t2 
where pid > '2000' and t2.id=t1.id 
order by pid asc 
limit 10

但数据就像

pid
2221
2223
2224
2227
**223**
2238
2239
2242
2245
2247
**225**

如何排序?

4 个答案:

答案 0 :(得分:6)

您的数据按字母数字排序。要强制进行数字排序,必须将数据转换为数字。例如pid * 1

select pid 
from `patient_list` t1, patient_info t2 
where pid > '2000' 
and t2.id=t1.id 
order by pid * 1 asc 
limit 1

由于您的pid属于字符串类型,因此您应该考虑将其更改为int

答案 1 :(得分:0)

您的pid-columns似乎不是数字字段类型,因此将值作为字符串值进行处理。 在你的情况下,order-by-algorithm是按字符排序整个字符串char而不是数字的实际值

2227, 223, 2238将排序为AAAG, AAB, AABG

我假设它的varchar,尝试将其更改为INT

答案 2 :(得分:0)

为了做到这一点,你应该按照pid和它自身的长度排序。这个技巧甚至适用于非整数的pids。

select pid from patient_list t1, patient_info t2 
where length(pid) >= 4 and pid > '2000' and t2.id=t1.id 
order by length(pid) asc, pid asc limit 1

答案 3 :(得分:0)

首先,清理数据。其次,转为int。第三,排序和/或过滤。

select pid from `patient_list` t1, patient_info t2 
where replace(pid, "*", "") + 0 > 2000 and t2.id = t1.id 
order by replace(pid, "*", "") + 0
limit 1

请注意,您还要对该字段进行过滤,因此您应该使用替换逻辑两次。