ORDER BY字母数字排序

时间:2016-06-12 15:14:54

标签: sql sqlite sql-order-by natural-sort

我想按以下顺序对数据进行排序:

  • 数-编号
  • α-编号
  • Alpha没有破折号

我有以下几种:

  • 120-1
  • 120-2
  • 120-10
  • 数字-1
  • 数字-10
  • 数字-2
  • 婚礼

这是我正在寻找的订单,除了数字(Alpha with dash)条目在破折号后没有按数字排序。

经过多次尝试,这是我当前的sql语句:

SELECT SessionID, Identifier FROM Session 
ORDER BY 
CASE 
  WHEN CAST(Identifier AS INTEGER) THEN SUBSTR(Identifier,0, INSTR(Identifier, '-')) + CAST(SUBSTR(Identifier, INSTR(Identifier, '-')+1, 999) AS INTEGER) 
ELSE Identifier END

我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:2)

1)按字母顺序排列,其中包含f(x) = cos(<w, x>) ,因此它们首先出现

2)在包含-的字符串中-之前的第一部分的顺序将它们作为整数投射为适用的整数,列表本身的其他顺序

3)在包含-的字符串中-之后的第二部分排序,在适用的情况下将它们作为整数投射,列本身的其他顺序

-

SQL Fiddle

答案 1 :(得分:0)

你的逻辑以某种方式重建字符串,但对于order by,你想要这样的东西:

order by (case when CAST(Identifier AS INTEGER)  <> 0 then 1
               when Identifier like '%-%' then 2
               else 3
          end),
         identifier

注意:这假设数字从不0