[英]ORDER BY Alphanumeric sort
我想按以下順序訂購數據:
我有以下幾種:
這是我要尋找的順序,除了數字(帶破折號的Alpha)條目不在破折號后按數字排序。
經過多次嘗試,這是我當前的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
我究竟做錯了什么?
謝謝。
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
您的邏輯是以某種方式重構字符串,但是對於按的order by
,您需要這樣的東西:
order by (case when CAST(Identifier AS INTEGER) <> 0 then 1
when Identifier like '%-%' then 2
else 3
end),
identifier
注意:這假定數字從不為0
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.