天天看點

sql自定義排序

方法一:

比如需要對SQL表中的字段NAME進行如下的排序:

張三(Z)

李四(L)

王五(W)

趙六(Z)

按照sql中的預設排序規則,根據字母順序(a~z)排,結果為:李四  王五 趙六 張三

自定義排序:order by charindex(NAME,‘張三李四王五趙六’)

CHARINDEX函數傳回字元或者字元串在另一個字元串中的起始位置。CHARINDEX函數調用方法如下:

       CHARINDEX ( expression1 , expression2 [ , start_location ] )

       Expression1是要到expression2中尋找的字元中,start_location是CHARINDEX函數開始在expression2中找expression1的位置。

       CHARINDEX函數傳回一個整數,傳回的整數是要找的字元串在被找的字元串中的位置。假如CHARINDEX沒有找到要找的字元串,那麼函數整數“0”。讓我們看看下面的函數指令執行的結果:

      CHARINDEX('SQL', 'Microsoft SQL Server')

      這個函數指令将傳回在“Microsoft SQL Server”中“SQL”的起始位置,在這個例子中,CHARINDEX函數将傳回“S”在“Microsoft SQL Server”中的位置11。

接下來,我們看這個CHARINDEX指令:

      CHARINDEX('7.0', 'Microsoft SQL Server 2000')

      在這個例子中,CHARINDEX傳回零,因為字元串“7.0” 不能在“Microsoft SQL Server”中被找到。接下來通過兩個例子來看看如何使用CHARINDEX函數來解決實際的T-SQL問題。   方法二: 針對表table_example的class字段排序,class字段值為:A、B、C、D。使用者要求table_example中的資料按照class字段值C、A、D、B的順序排序。    

select * from teble_exaple 

order by( 

case class 

when 'C' then 1,

when 'A' then 2,

when 'D' then 3,

when 'B' then 4

else '' 

end 

)   方法三: 利用decode函數:   select * from table_example order by decode(class,'C',1,'A',2,'D',3,'B',4)