2012-05-01 115 views
2

如果我有一個1,2,3,4,5,K的列表,我希望它的訂購像K,1,2,3,4,5我怎麼能在SQL中做到這一點?這些值是SQL表中唯一的值。這是在MySQL中,但也歡迎其他數據庫。SQL排序字符串和數字

+0

目前還不清楚是否這些表中的行/結果集,或逗號分隔值的單個字符串要在其中的順序值改變了。 – Hammerite

+0

你的排序規則是什麼?數字前的字母? –

+0

什麼sql方言? – dfb

回答

5

有mysql中沒有整數dection功能,所以你必須做這樣的事情。假設你的列是VARCHAR或類似的,你可以簡單的東西像這樣

ORDER BY CASE WHEN field REGEXP '^-?[0-9]+$' THEN field ELSE '0'+field END 
+0

不能將它轉換爲帶符號的int嗎? –

+0

當然,但是如果失敗了,你會得到一個null。這一步就完成了 – dfb

1

在Oracle中,你可以這樣做:

ORDER BY CASE WHEN column='K' THEN 0 ELSE TO_NUMBER(column) END 

其他系統可能也有類似的結構。

0

這裏有一個在SQLite的工作:

select v1.* from (
    select t3.*, (case when value = 'K' then '0' else value end) normalized_val 
    from t3) v1 
order by v1.normalized_val;