SqlServer按照指定順序對字段進行排序
問題如下,在SqlServer有一個這樣的SQL查詢
SELECT *
FROM Product
WHERE ID IN ( 12490, 12494, 12486 )
在一個名為Product的表中對自增字段ID做in查詢,他希望查出來的記錄ID字段按照12490,12494,12486這個順序來排,但是很不幸的是查出來后的記錄是按照ID的進行正排序
這並不符合他的要求。
查出的結果如下:
由於對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的下標值(之所以兩邊加上","是因為查詢下標的時
候類似ID=123和ID=1234會查到同一個下標,網上給出的類似答案幾乎都沒有注意到這一點!!!)。如果對CHARINDEX這個方法不看不明的話可以看下以下這個查詢,估計
就明白了。
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。