我有一列数字存储为字符。当我为这个专栏做一个ORDER BY时,我得到以下内容:
100
131个
200个
21个
30个
31000个
等
如何以数字方式订购这些字符?我需要转换某些内容还是已经有SQL命令或函数?
谢谢。
答案 0 :(得分:72)
试试这个:
ORDER BY CAST(thecolumn AS int)
答案 1 :(得分:22)
这对我有用:
ORDER BY ABS(column_name)
答案 2 :(得分:2)
这是一个以“自然排序”排序数字字符串的问题(如果你在Google上查找“自然排序”,你会发现很多东西)。基本上将字符串转换为int并对结果值进行排序应该修复它。
答案 3 :(得分:1)
原因是使用char数据类型,您将行排序为字符串。
ORDER BY CAST()
的想法是正确的,但是随着返回结果数量的增加,这种情况会下降。
如果它只是本专栏中的数字数据,那么最佳做法是找到合适的数值数据类型并进行更改。
如果你真的无法更改列并且发现自己遇到性能问题,我建议使用一个排序顺序列,其中包含转换为整数的值(将null转换为适当的值)。
索引排序顺序列,理想情况下,向CHAR列添加一个触发器,以便对char值的插入或更新触发对整数值的更新。
答案 4 :(得分:1)
在某些情况下,这可能是一个很好的匹配:
ORDER BY LENGTH(column_name), column_name
特别是如果您的一列中包含所有数字或字母和数字的混合但都具有相同的长度。