Select Where In 的排序问题在SQL里怎么按 Select Where In 的内容进行字段排序?
假如SQL语句为:
Select * FROM table1 Where (ID IN
(3,5,1,4,2))
如果In后面的条件都是数字,那MSSQL排序应该为
Select * FROM table1 Where (ID IN (3,5,1,4,2))
orDER BY CHARINDEX(',' + CONVERT(nvarchar, ID) + ',', ',' +
CONVERT(nvarchar,
Replace('3,5,1,4,2', ' ','')) + ',')
改进方法,不去处理空格,直接改用空格判断.可以用来判断少数有空格的字符条件.
Select * FROM table1 Where (ID IN (3,5,1,4,2))
orDER BY PATINDEX('% ' + CONVERT(nvarchar(4000), ID) + ' %', ' ' +
CONVERT
(nvarchar(4000), Replace('3,5,1,4,2', ',',' , ')) + ' ')
其实还是在SQL外处理好条件字符串再进行查询和排序比较好.
对于MYSQL排序可能要改为(MYSQL不熟):
Select * FROM table1 Where (ID IN (3,5,1,4,2))
orDER BY FIND_IN_SET(ID, '3,5,1,4,2')
在查询分析器中执行:
select id from table1 where id in(3224,3225,3395,2810,3280,3281,3292)
结果确实(按ID又小到大排序了):
2810
3224
3225
3280
3281
3292
3395
请问如果能让id按我(3224,3225,3395,2810,3280,3281,3292)中的顺序显示了。
PS:我的SQL语句是通过hibernate调用的,所以不能用存储过程什么的
order by charindex(...) 是好方法:)
select id from table1 where id in(3224,3225,3395,2810,3280,3281,3292) order by
charindex( ', '+rtrim(id)+ ', ' , ', '+
'3224,3225,3395,2810,3280,3281,3292 '+ ', ')
我有个sql查询:
select * from table_name t
where t.id in
(
'235',
'dsafas',
'fsafsa',
'gdghdh',
'her',
'fw',
'fsafa'
)
查询出的结果是按照ASCLL编码排序的,请问有没有方法按照in列表的顺序列出查询结果,谢谢。
decode啊!反正就这么几个
这只是一个例子,有一万多条!
一万多条的话,不可能放到in列表,应该用表连接;在这一万多条的表上另外加一个排序字段,结果用ORDER BY排序。
大哥, 这1万多条不是表里的, 是客户需要查询的, 没什么规律可言. 没办法用表连接.
t.id 不是和那数据由连接关系吗?构造表啊
select * from table_name t
where t.id in
(
'235',
'dsafas',
'fsafsa',
'gdghdh',
'her',
'fw',
'fsafa'
)
order by decode
(
t.id,
'235',1,
'dsafas',2,
'fsafsa',3,
'gdghdh',4,
'her',5,
'fw',6,
'fsafa',7
);