用CHARINDEX方法實現(xiàn)對字段按指定順序排序
在SqlServer有一個這樣的SQL查詢,select * from Product where ID in (12490,12494,12486)。在一個名為Project的表中對自增字段ID做in查詢,他希望查出來的記錄ID字段按照'12490','12494','12486'這個順序來排,但是很不幸的是查出來后的記錄是按照ID的進行正排序,這并不符合他的要求。
查出的結果如下:
其實我們可以用SqlServer的CHARINDEX方法來完成這一實現(xiàn),代碼如下:
- select * from Product where ID in(12490,12494,12486)
- order by CHARINDEX(','+CONVERT(varchar(10),ID)+',',',12490,12494,12486,')
查詢的結果如下:
說明:這里用到一個小技巧,就是把ID轉(zhuǎn)成字符串,然后在兩邊加上",",組合一個字符串,用逗號隔開每個ID,然后查詢ID的下標值(之所以兩邊加上","是因為查詢下標的時候類似ID=123和ID=1234會查到同一個下標,網(wǎng)上給出的類似答案幾乎都沒有注意到這一點?。。。?。如果對CHARINDEX這個方法不看不明的話可以看下以下這個查詢,估計就明白了。
- select Product.*, CHARINDEX(','+CONVERT(varchar(10),ID)+',',',12490,12494,12486,') AsIdIndex
- from Product
- whereID in(12490,12494,12486)
- order byIdIndex
查詢結果如下(請看第二個表,***個表用來做對比),這里也可以發(fā)現(xiàn)一個細節(jié),就是Index是從1開始的,而不是0。
本文就介紹到這里,如果您有更好的實現(xiàn)方法,歡迎您與我們分享,共同進步才是硬道理!
【編輯推薦】