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