SQL按照指定順序對字段進行排序

SqlServer按照指定順序對字段進行排序

問題以下,在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。

\

相關文章
相關標籤/搜索