【问题标题】:Using SORTORDER to sort x.x.x values SQL使用 SORTORDER 对 x.x.x 值进行排序 SQL
【发布时间】:2014-10-17 12:31:42
【问题描述】:

假设我正在尝试对“数字”列进行排序

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

当我这样做时

ORDER BY NUMBERS ,得到的排序列是

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

我知道原始列已经排序,但这仅适用于本示例...为什么 .10 会出现在 .2 之前?

【问题讨论】:

  • (假设数字的列类型是文本)。因为 1.1.10 按字母顺序排在 1.1.2 之前。引用维基百科:按字母顺序放置一组单词或字符串的结果是将所有以相同字母开头的字符串组合在一起;并且在该分组中,以相同的两个字母序列开头的所有单词都被分组在一起;等等。因此,系统倾向于最大化相邻单词之间的共同首字母的数量。
  • @vc74 - 我会把它作为答案发布......因为这就是真正要问的所有问题,为什么?不一定如何修复或更改。
  • @gloomy.penguin Dun!

标签: sql sorting


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    这是一个 hack,但你可以试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      相关资源
      最近更新 更多