SQL语句之按in排序

有时候我们需要按照in条件里的id顺序输出结果,可sql语句在不加order by的时候是按照asc排序的,下边的sql解决按照in条件顺序的id输出查询结果

mysql写法:

 

SELECT * FROM EVENT WHERE eventId IN(443,419,431,440,420,414,509)  ORDER BY INSTR(',443,419,431,440,420,414,509,',CONCAT(',',eventId,','))

 

oracle写法:

select name from order where oderid in(111,222,333,444,555,666)order by instr('111,222,333,444,555,666',orderid)

 

sqlserver写法:

Select * From Product Where id in (1,1588,15782,9887,54)  Order By charindex(','+ id +',', ',1,1588,15782,9887,54,')


Access:
select * From 表 Where id in(1,5,3) order by instr(',1,5,3,',','&id&',')

MSSQL:
select * From 表 Where id in(1,5,3) order by charindex(','+rtrim(cast(id as varchar(10)))+',',',1,5,3,')

MySQL:
select * From 表 Where id in (1,5,3) order by instr(',1,5,3,',',CONCAT(',',id,','))

### 实现 SQL 中字段的自定义排序SQL 查询中实现字段的自定义排序可以通过多种方式完成,具体取决于所使用的数据库管理系统 (DBMS) 和需求。 #### 使用 `CASE` 表达式进行自定义排序 对于大多数 DBMS,包括 SQL Server 和 MySQL,可以使用 `CASE` 表达式来创建复杂的排序逻辑。通过这种方式可以根据特定条件调整记录的位置: ```sql SELECT * FROM table_name ORDER BY CASE column_name WHEN 'value1' THEN 1 WHEN 'value2' THEN 2 -- 添加更多情况... ELSE 3 END; ``` 此方法允许灵活控制不同值之间的相对位置[^1]。 #### 利用字符串函数配合查找索引实现排序 当需要按照预设列表内的项目顺序排列时,在某些情况下可以直接利用字符串操作函数与 `CHARINDEX()` 或者 `FIND_IN_SET()` 函数相结合来进行处理: ```sql -- 对于 SQL Server 可以这样写: SELECT * FROM temp_table ORDER BY CHARINDEX(name, 'bob,tom,timi'); -- 而对于 MySQL,则应该采用如下形式: SELECT * FROM temp_table WHERE FIND_IN_SET(name, 'bob,tom,timi'); ``` 上述例子展示了基于名字列的内容按指定序列重新安排输出次序的方法[^2]. #### 应用解码器(Decode)或等价功能改变原有数值映射关系 如果目标是在不更改表结构的前提下修改某列用于比较的关键字权重,那么像 Oracle 数据库里的 DECODE() 这样的内置工具就显得尤为有用;而在其他类型的 RDBMS 上则可能要寻找相应的替代品,比如 PostgreSQL 的 COALESCE(), SQLite 的 IFNULL() 等. 下面是一个适用于 Oracle 的实例,它会把 BBTYPE=3 排到最底部: ```sql SELECT BBNAME, BBTYPE, DECODE(BBTYPE, '1', 1, '2', 2, '4', 3, '5', 4, '3', 5) AS BBTYPE_SORT, REPORTDATE, ISALLREPORY FROM TEMP ORDER BY BBTYPE_SORT; ``` 这段代码片段说明了怎样通过转换原始类型编码达到预期的效果[^3]. #### MyBatis Plus 框架下的多字段组合排序策略 除了标准 SQL 提供的功能外,一些高级 ORM 工具也支持更便捷的操作模式。例如,在 Java 开发环境中常用的 MyBatis Plus 就提供了链式调用来简化复杂查询语句构建过程: ```java qw.orderBy(true, true, "status").orderBy(true, false, "name"); ``` 这里展示的是先升序再降序两个属性共同作用下产生的最终结果集排序方案[^4].
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值