2012-05-01 82 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;