問題以下,在SqlServer有一個這樣的SQL查詢post
SELECT *
FROM Product
WHERE ID IN ( 12490, 12494, 12486 )spa
在一個名爲Product的表中對自增字段ID作in查詢,他但願查出來的記錄ID字段按照12490,12494,12486這個順序來排,可是很不幸的是查出來後的記錄是按照ID的進行正排序3d
這並不符合他的要求。code
查出的結果以下:blog
因爲對SQL實在是不熟悉,因而我查了點資料,發現能夠用SqlServer的CHARINDEX方法來完成這一實現,最終給出以下的答案,排序
SELECT * FROM Product WHERE ID IN ( 12490, 12494, 12486 ) ORDER BY CHARINDEX(',' + CONVERT(VARCHAR(10), ID) + ',' + ',12490,12494,12486,')
查詢的結果以下:
字符串
說明:這裏用到一個小技巧,就是把ID轉成字符串,而後在兩邊加上",",組合一個字符串,用逗號隔開每一個ID,而後查詢ID的下標值(之因此兩邊加上","是由於查詢下標的時it
候相似ID=123和ID=1234會查到同一個下標,網上給出的相似答案几乎都沒有注意到這一點!!!)。若是對CHARINDEX這個方法不看不明的話能夠看下如下這個查詢,估計class
就明白了。技巧
SELECT Product.* , CHARINDEX(',' + CONVERT(VARCHAR(10), ID) + ',', ',12490,12494,12486,') AS IdIndex FROM Product WHERE ID IN ( 12490, 12494, 12486 ) ORDER BY IdIndex
查詢結果以下(請看第二個表,第一個表用來作對比),這裏也能夠發現一個細節,就是Index是從1開始的,而不是0。