您好,登錄后才能下訂單哦!
這篇文章主要介紹“SQL查詢之字段是逗號分隔開的數組怎么查詢匹配數據”,在日常操作中,相信很多人在SQL查詢之字段是逗號分隔開的數組怎么查詢匹配數據問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SQL查詢之字段是逗號分隔開的數組怎么查詢匹配數據”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
SELECT * FROM U_PUR1 WHERE CHARINDEX( ',' + '100306' + ',', ',' + DeptCode + ',' ) >0
匹配字符串開始位置的函數 CHARINDEX(str1,str,[start])
CHARINDEX(str1,str,[start]) 函數返回子字符串 str1 在字符串 str 中的開始位置,start 為搜索的開始位置,如果指定 start 參數,則從指定位置開始搜索;如果不指定 start 參數或者指定為0或者負值,則從字符串開始位置搜索。
SELECT * FROM U_PUR1 WHERE ',' + DeptCode + ',' LIKE '%,' + '100306' + ',%';
Where Like 的方式顯然更好理解一些,首先在字段收尾加上逗號,這樣可以使得字段中每一個值都擁有完整的格式,再使用Like進行模糊匹配時,可以使首尾的值都能匹配到。
在工作中,經常會遇到一對多的關系,比如用戶和愛好。想要在mysql中保存這種關系,一般有兩種方式,一種是建立一張用戶愛好表user_hobby(user_id, hobby_id),這樣一條user_id就會存在多條記錄。
或者采用第二種方式,直接在用戶表中增加hobby_ids字段,將hobby_id拼接成用逗號分隔的字符串保存起來。
那么問題來了,如果采用第二種方式的話,查詢的時候要如何處理呢?下面介紹幾種常見的處理方式。
可能最新想到的是采用like的形式,如下:
select * from user where hobby_ids like '%1%';
這種方式是否可行呢? 行,但是有適用范圍,如果hobby_id在10以內,那么這么處理完全是可以的,但是一旦超過了10,那'%1%'就會把10,11,這些帶1的id全都匹配處理。
為了解決like存在的問題,還可以使用mysql提供的find_in_set(str, strlist),sql可以這樣寫:
select * from user where find_in_set('1', hobby_ids);
這樣mysql就會把hobby_ids的值,按照逗號分隔的一個個元素去匹配。如果我們要匹配多個值要怎么辦呢,比如查找喜歡1-籃球或2-足球的用戶,可以
select * from user where find_in_set('1', hobby_ids) or find_in_set('2', hobby_ids);
如果匹配的值較多,我們可能要拼很長的sql,那有沒有稍微簡短的方式呢,我們可以采用下面的方式。
regexp是mysql提供的強大的正則匹配方式。上面的sql就可以改寫成:
select * from user where hobby_ids regexp '(^|,)(1|2)(,|$)';
這里是完全采用字符串正則匹配的方式,(1|2)表示匹配1或者2,(^|,)表示數字前面必須是字符串開頭或者是一個逗號,(,|$)表示數字后面必須是逗號或者字符串的結尾。這樣就可以完整匹配逗號分隔的元素了。
到此,關于“SQL查詢之字段是逗號分隔開的數組怎么查詢匹配數據”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。