2008年12月1日 星期一

SQL PATINDEX指令

最近都在組sql,table裡有十二個欄位分別記錄十二個月的狀態,
但是我只要判斷他記錄最後一個月(有個能是二月、也有可能是十一月)狀態來比對,
所以我就把十二個欄位相加起來,null值就給他'A',另給他一欄叫SalesStatus,
SalesStatus的值有可能會這幾種情況AA21122A1AAA 或 322221122222 或 AAAAAAAAAAAA。
因為只要最後一個狀態,所以要從右邊數過來第一個不為A的值,
想了好久,在GOOGLE上面找到PATINDEX這個指令,他可以用萬用字元,YA~
SELECT PATINDEX('%[^A]%',REVERSE(rtrim('AA21122A1AAA'))) ->4
SELECT PATINDEX('%[^A]%',REVERSE(rtrim('322221122222'))) ->1
SELECT PATINDEX('%[^A]%',REVERSE(rtrim('AAAAAAAAAAAA'))) ->0

ps:
1:REVERSE<--這個指令之前介紹過會把字串反過來
AA21122A1AAA ->AAA1A22112AA
322221122222 ->222221122223
A122222AA222 ->222AA222221A
2:[^]萬用字元 - 不相符的字元