如何对varchar数字列进行排序?

时间:2014-04-14 10:47:03

标签: mysql sql

我写... ORDER BYASC 但是我的专栏是VARCHAR,它的排序错误,如

我想对数值进行排序,但其数据类型为varchar,然后是如何 像这样的价值

1.2.840.113619.2.55.3.163578213.42.1355218116.691.1
1.2.840.113619.2.55.3.163578213.42.1355218116.691.10
1.2.840.113619.2.55.3.163578213.42.1355218116.691.100
1.2.840.113619.2.55.3.163578213.42.1355218116.691.101
1.2.840.113619.2.55.3.163578213.42.1355218116.691.2
1.2.840.113619.2.55.3.163578213.42.1355218116.691.20

但我想顺序完成

1.2.840.113619.2.55.3.163578213.42.1355218116.691.1
1.2.840.113619.2.55.3.163578213.42.1355218116.691.2
1.2.840.113619.2.55.3.163578213.42.1355218116.691.10
1.2.840.113619.2.55.3.163578213.42.1355218116.691.20
1.2.840.113619.2.55.3.163578213.42.1355218116.691.100
1.2.840.113619.2.55.3.163578213.42.1355218116.691.101

我也有像这样的字符串

1.2.840.114257.0.10325113632288210457800001002296133400001
1.2.840.114257.0.10379710976288210457800000002296491200000
1.2.840.114257.0.10328923264288210457800000002296158400001

我也想对此进行排序......

3 个答案:

答案 0 :(得分:2)

对于您的具体示例,您可以执行以下操作:

ORDER BY length(col), col

如果您有其他示例,则可能需要"解析"使用substring_index()的值。

答案 1 :(得分:2)

我尝试过以下操作并且工作正常。 首先从字符串中删除".",这样您只有数字,然后使用ABC()函数进行排序,这样就不会被截断。

SELECT yourcol AS v FROM test ORDER BY ABS(REPLACE(yourcol, '.', '')), yourcol;

答案 2 :(得分:2)

我认为你应该重新设计你的架构,

如果你输入的数字只有@Gordon Linoff答案的数字 或者您的输入也可能包含字符串(eg: ankit123),并且您希望对该字符和数字进行排序,而不是为此进行排序

您必须implementing任意Algorithm这样

让我们来eg

1 >1.2.1
2 >1.2.10
3 >1.2.2

现在使所有数字相等,确定任何max长度(eg:5),因此请提前0以使所有数字具有相同的长度

现在上面的字符串看起来像

1 >00001.00002.00001
2 >00001.00002.00010
3 >00001.00002.00002

现在,如果您在此字符串上触发ORDER BY,则会按排序顺序获取输出。