ORDER BY 字母数字排序

ORDER BY Alphanumeric sort

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

我有以下排序:

这是我要查找的顺序,除了数字(带破折号的字母)条目未按破折号后的数字排序。

经过多次尝试,这是我目前的 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

我做错了什么?

谢谢。

您的逻辑是以某种方式重构字符串,但是对于 order by,您需要这样的东西:

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

注意:这假设数字永远不会 0

1) 按包含 - 的字符串排序,因此它们首先出现

2) 按包含 - 的字符串中 - 之前的第一部分排序,在适用的情况下将它们转换为整数,否则按列本身排序

3) 在包含 - 的字符串中按 - 之后的第二部分排序,在适用的情况下将它们转换为整数,否则按列本身排序

select val
from t
order by 
 case when val like '%-%' then 1 else 2 end
,case when substr(val,1,instr(val,'-')-1) glob '*[0-9]*' 
      then cast(substr(val,1,instr(val,'-')-1) as integer) 
      when substr(val,1,instr(val,'-')-1) glob '*[a-zA-Z]*' 
      then substr(val,1,instr(val,'-')-1)
 else val end
,case when val like '%-%' then cast(substr(val,instr(val,'-')+1) as integer)
 else val end

SQL Fiddle