當資料庫有個欄位儲存的資料是以A01,A011,A02,A03...等字串的資料型態在儲存時,要如何用SQL語法找出其中一個值,例如要找欄位中的字串含A01的記錄.
這個的標題有點下,很難用標題點出要分享的內容,這個經驗相信有非常多人都會遇到,只是各自的解法不同,這次所以提的是當資料庫內所儲存的資料是一組多筆記錄組成的字串,例如:
TableName : UserMenuRight
資料型態 | 欄位名稱 | 欄位說明 |
UserID | 使用者代號 | |
Nvarchar | UserRight | 使用者權限 |
資料內容
UserID | UserRight |
1 | A01,A011,A02,A03,A021 |
2 | A011, A03 |
3 | A02,A021,A01 |
當我們要找UserRight這欄位的內容含有A01的資料時,SQL語法要怎麼下,才能找到A01,又不會帶出A011,而且A01也可能是字串的最前面,也可能是最後面,也可能在中間,那要怎麼去下條件?
我這是有個做法可以很簡單的去解決這類型的問題,直接在Script裡解決即可,以這個問題來說,語法可以這麼下:
Oracle :
Select * from UserMenuRight where ','|| UserRight ||',' like '%,A01,%'
Sql
Select * from UserMenuRight where ','+ UserRight +',' like '%,A01,%'
眼尖的人應該已經看出來了,用此語法,因為資料庫的資料已先前後加逗號,所以就會是A01 變, A01,或A01,A02,A011,A03,A021變, A01,A02,A011,A03,A021, 當我們的查詢條件下like ‘%,A01,%’,不管它在前/中/後或單一,都可以找到.所以查詢結果就會找到第1,3筆的資料.,第二筆就不會帶出來了.
或許這不是最好的方法,但這也是一種解法,如果有其它更好的方式,歡迎分享~