SQL語句之按in排序

2022-04-05 20:14:25 字數 2043 閱讀 9272

有時候我們需要按照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,','))

那麼,我們如何

用charindex方法實現對字段按指定順序排序

呢?在sqlserver有乙個這樣的sql查詢,select * from product where id in (12490,12494,12486)。在乙個名為project的表中對自增欄位id做in查詢,他希望查出來的記錄id欄位按照'12490','12494','12486'這個順序來排,但是很不幸的是查出來後的記錄是按照id的進行正排序,這並不符合他的要求。

查出的結果如下:

其實我們可以用sqlserver的charindex方法來完成這一實現,**如下:

select * from product where id in(12490,12494,12486)   

order by charindex(','+convert(varchar(10),id)+',',',12490,12494,12486,') 

查詢的結果如下:

說明:這裡用到乙個小技巧,就是把id轉成字串,然後在兩邊加上",",組合乙個字串,用逗號隔開每個id,然後查詢id的下標值(之所以兩邊加上","是因為查詢下標的時候類似id=123和id=1234會查到同乙個下標,網上給出的類似答案幾乎都沒有注意到這一點!!!)。如果對charindex這個方法不看不明的話可以看下以下這個查詢,估計就明白了。

select product.*, charindex(','+convert(varchar(10),id)+',',',12490,12494,12486,') as idindex   

from product  

whereid in(12490,12494,12486)   

order by idindex 

查詢結果如下(請看第二個表,第乙個表用來做對比),這裡也可以發現乙個細節,就是index是從1開始的,而不是0。

本文就介紹到這裡,如果您有更好的實現方法,歡迎您與我們分享,共同進步才是硬道理!

SQL語句(八)按條件查詢

select from student select sclass,snumb,sname from student 物理班有哪些同學 年齡小於20歲的有哪些同學?定價在30元以下的計算機書有哪些?sname 張三 sname 張三 snumb 10001 sbirthday 1996 01 01 ...

SQL語句 ORDER BY排序

當查詢資料庫裡的資料時,為了使資料不那麼凌亂,我們可以對資料進行排序處理 排序格式 order by 字段預設公升序 order by 字段 asc公升序 order by 字段 desc降序 snos name gender ageheight speciality 1001張三男 181.78 ...

sql語句查詢排序

order by 是用在where條件之後,用來對查詢結果進行排序 order by 欄位名 asc desc asc 表示公升序 預設為asc,可以省略 desc表示降序 order by 無法用於子查詢,否則會報錯 除非另外還指定了 top 或 for xml,否則,order by 子句在檢視...