使用排序顺序进行排序XXX值SQL

问题描述:

比方说,我想排序的列 “数字”使用排序顺序进行排序XXX值SQL

数=
“1,
1.1,
1.1.1,
1.1.2,
1.1.10"

当我做

ORDER BY号码,所产生的排序列是

数=
“1,
1.1,
1.1.1,
1.1.10,
1.1.2”

我才知道,原来列已经被排序,但这只是对于这个例子...为什么.10会在0.2之前出现?

+3

(假设数字列类型是文本)。因为1.1.10在1.1.2之前按字母顺序排列。引用*:以字母顺序放置一组单词或字符串的结果是,以相同字母开头的所有字符串被组合在一起;并且在该分组内,以相同的双字母序列开头的所有单词被分组在一起;等等。因此该系统倾向于最大化相邻单词之间的公共首字母的数量。 – 2014-10-17 12:35:53

+1

@ vc74 - 我会张贴作为答案...因为这是所有问题真的问,为什么?不一定如何修复或改变。 – 2014-10-17 12:39:04

+0

@ gloomy.penguin邓! – 2014-10-17 12:40:30

(假设数字的列类型是文本)。

因为1.1.10在1.1.2之前按字母顺序排列。

引用wikipedia:按字母顺序放置一组单词或字符串的结果是,以相同字母开头的所有字符串被组合在一起;并且在该分组内,以相同的双字母序列开头的所有单词被分组在一起;等等。因此该系统倾向于最大化相邻单词之间的公共首字母的数量。

这是一个黑客,但你可以试试这个:

ORDER BY CAST(PARSENAME(numbers, 3) as int), CAST(PARSENAME(numbers, 2) as int), CAST(PARSENAME(numbers, 1) as int)