SQL对字符串和数字进行排序

SQL对字符串和数字进行排序,sql,Sql,如果我有一个1,2,3,4,5,K的列表,并且我希望它像K,1,2,3,4,5那样排序,那么我如何在SQL中做到这一点?这些值是SQL表中唯一的值。这是MySQL中的,但也欢迎使用其他数据库。在Oracle中,您可以执行以下操作: ORDER BY CASE WHEN column='K' THEN 0 ELSE TO_NUMBER(column) END 其他系统可能也有类似的结构。如果需要对SELECT的结果进行排序,则可以按照ORDER BY语句声明自定义排序规则 下面是一个例子: 这样

如果我有一个
1,2,3,4,5,K
的列表,并且我希望它像
K,1,2,3,4,5
那样排序,那么我如何在SQL中做到这一点?这些值是SQL表中唯一的值。这是MySQL中的,但也欢迎使用其他数据库。

在Oracle中,您可以执行以下操作:

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

其他系统可能也有类似的结构。

如果需要对SELECT的结果进行排序,则可以按照ORDER BY语句声明自定义排序规则

下面是一个例子:

这样做的目的是为每个项目分配您自己的优先级


请记住,它可能取决于实际的SQL server。

这里有一个在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;

mysql中没有整数dection函数,所以您必须执行类似的操作。假设您的列是varchar之类的,您可以使用如下简单的方法

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

不清楚这些是表/结果集中的行,还是要更改值顺序的逗号分隔值的单个字符串。排序规则是什么?字母在数字之前?我不能将其转换为带符号的整数吗?当然可以,但当它失败时,您将有一个空值。这是一步完成的