我在数据库中有一个表,其中一个列将ID存储为varchar。当我使用PHP从db获取数据并将其显示在HTML表中时,我希望它按ID排序。最后,记录被排序,但是以一种奇怪的方式......:
ID name
------------------
|AA120 | |
|AA121 | |
|AA122 | |
|AA1199 | |
|AA119 | |
|AA1200 | |
|AA1201 | |
|AA1202 | |
etc.
我在查询中使用此字符串:
ORDER BY CONVERT('$ID',UNSIGNED INTEGER)
是否有针对此类问题的修复程序..?
答案 0 :(得分:3)
为什么不抓取所有记录,并使用natsort对它们进行排序,然后显示它们?
答案 1 :(得分:0)
你得到字母数字(“按字母顺序排列”)排序 - 这就是为什么AA119在AA1199之后出现的原因。 PHP的 natsort 将是一个解决方案,但我宁愿建议切换到填充编号,如AA0119而不是AA119,以防止在混合字母和数字逻辑时出现进一步的问题
答案 2 :(得分:0)
尝试此查询,这既适用于整数,也适用于字符串和整数
的组合
select column
from table
order by
regexp_substr(column, '^\D*') nulls first,
to_number(regexp_substr(column, '\d+'))
答案 3 :(得分:0)
你可以尝试这个命令@Dims
select col_name from table_name order by len(col_name), col_name