我写...
ORDER BY
列ASC
但是我的专栏是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
我也想对此进行排序......
答案 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
,则会按排序顺序获取输出。