我想按以下顺序对数据进行排序:
我有以下几种:
这是我正在寻找的订单,除了数字(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
我做错了什么?
感谢。
答案 0 :(得分:2)
1)按字母顺序排列,其中包含f(x) = cos(<w, x>)
,因此它们首先出现
2)在包含-
的字符串中-
之前的第一部分的顺序将它们作为整数投射为适用的整数,列表本身的其他顺序
3)在包含-
的字符串中-
之后的第二部分排序,在适用的情况下将它们作为整数投射,列本身的其他顺序
-
答案 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
。