order by charindex

网友提供:

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,','))

=====================================================================

网络上搜的文章:

--建立测试环境
Create Table TESTA
(ID   Int,
 Name   Varchar(10))

Create Table TESTB
(Grade      Nvarchar(10),
 Quantity   Int)

Create Table TESTC
(Class      Nvarchar(10),
 Person      Int)
--插入数据
Insert TESTA Values(1,'AA')
Insert TESTA Values(2,'BB')
Insert TESTA Values(1,'CC')
Insert TESTA Values(3,'DD')
Insert TESTA Values(5,'EE')

Insert TESTB Values(N'一年级',89)
Insert TESTB Values(N'三年级',92)
Insert TESTB Values(N'二年级',75)

Insert TESTC Values(N'乙班',3)
Insert TESTC Values(N'甲班',5)
Insert TESTC Values(N'丁班',8)
Insert TESTC Values(N'丙班',6)
--测试
--按2,1,3,5的顺序排序
Select * from TESTA Order By CharIndex(','+Rtrim(ID)+',',',2,1,3,5,')
--按2,5的顺序排序,其余的正常排序
Select * from TESTA Order By CharIndex(','+Rtrim(ID)+',',REVERSE(',2,5,')) Desc,ID
--按一二三的顺序排序
Select * from TESTB Order By CharIndex(Grade,N'一年级二年级三年级')
--按甲乙丙丁的顺序排序
Select * from TESTC Order By CharIndex(Class,N'甲班乙班丙班丁班')
--删除测试环境
Drop Table TESTA,TESTB,TESTC
--结果
/*
--按2,1,3,5的顺序排序
ID   Name
2   BB
1   CC
1   AA
3   DD
5   EE

--按2,5的顺序排序,其余的正常排序
ID   Name
2   BB
5   EE
1   AA
1   CC
3   DD

--按一二三的顺序排序
Grade   Quantity
一年级   89
二年级   75
三年级   92

--按甲乙丙丁的顺序排序
Class   Person
甲班   5
乙班   3
丙班   6
丁班   8
*/

你可能感兴趣的:(mysql)