SQL查詢(xún)之字段是逗號(hào)分隔開(kāi)的數(shù)組如何查詢(xún)匹配數(shù)據(jù)問(wèn)題
字段是逗號(hào)分隔開(kāi)的數(shù)組如何查詢(xún)匹配數(shù)據(jù)
方式一:CHARINDEX***()*****
SELECT ?? ?*? FROM ?? ?U_PUR1? WHERE ?? ?CHARINDEX( ',' + '100306' + ',', ',' + DeptCode + ',' ) >0
匹配字符串開(kāi)始位置的函數(shù) CHARINDEX(str1,str,[start])
CHARINDEX(str1,str,[start]) 函數(shù)返回子字符串 str1 在字符串 str 中的開(kāi)始位置,start 為搜索的開(kāi)始位置,如果指定 start 參數(shù),則從指定位置開(kāi)始搜索;如果不指定 start 參數(shù)或者指定為0或者負(fù)值,則從字符串開(kāi)始位置搜索。
方式二:WHERE LIKE
SELECT ?? ?*? FROM ?? ?U_PUR1? WHERE ?? ?',' + DeptCode + ',' LIKE '%,' + '100306' + ',%';
Where Like 的方式顯然更好理解一些,首先在字段收尾加上逗號(hào),這樣可以使得字段中每一個(gè)值都擁有完整的格式,再使用Like進(jìn)行模糊匹配時(shí),可以使首尾的值都能匹配到。
Mysql逗號(hào)分隔的字段查詢(xún)
在工作中,經(jīng)常會(huì)遇到一對(duì)多的關(guān)系,比如用戶(hù)和愛(ài)好。想要在mysql中保存這種關(guān)系,一般有兩種方式,一種是建立一張用戶(hù)愛(ài)好表user_hobby(user_id, hobby_id),這樣一條user_id就會(huì)存在多條記錄。
或者采用第二種方式,直接在用戶(hù)表中增加hobby_ids字段,將hobby_id拼接成用逗號(hào)分隔的字符串保存起來(lái)。
那么問(wèn)題來(lái)了,如果采用第二種方式的話(huà),查詢(xún)的時(shí)候要如何處理呢?下面介紹幾種常見(jiàn)的處理方式。
1.like
可能最新想到的是采用like的形式,如下:
select * from user where hobby_ids like '%1%';
這種方式是否可行呢? 行,但是有適用范圍,如果hobby_id在10以?xún)?nèi),那么這么處理完全是可以的,但是一旦超過(guò)了10,那'%1%'就會(huì)把10,11,這些帶1的id全都匹配處理。
2.find_in_set
為了解決like存在的問(wèn)題,還可以使用mysql提供的find_in_set(str, strlist),sql可以這樣寫(xiě):
select * from user where find_in_set('1', hobby_ids);
這樣mysql就會(huì)把hobby_ids的值,按照逗號(hào)分隔的一個(gè)個(gè)元素去匹配。如果我們要匹配多個(gè)值要怎么辦呢,比如查找喜歡1-籃球或2-足球的用戶(hù),可以
select * from user where find_in_set('1', hobby_ids) or find_in_set('2', hobby_ids);?
如果匹配的值較多,我們可能要拼很長(zhǎng)的sql,那有沒(méi)有稍微簡(jiǎn)短的方式呢,我們可以采用下面的方式。
3.regexp
regexp是mysql提供的強(qiáng)大的正則匹配方式。上面的sql就可以改寫(xiě)成:
select * from user where hobby_ids regexp '(^|,)(1|2)(,|$)';
這里是完全采用字符串正則匹配的方式,(1|2)表示匹配1或者2,(^|,)表示數(shù)字前面必須是字符串開(kāi)頭或者是一個(gè)逗號(hào),(,|$)表示數(shù)字后面必須是逗號(hào)或者字符串的結(jié)尾。這樣就可以完整匹配逗號(hào)分隔的元素了。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
centOS7安裝MySQL數(shù)據(jù)庫(kù)
本文給大家簡(jiǎn)單介紹了如何在centOS7下安裝MySQL5.6數(shù)據(jù)庫(kù)的方法,以及一些注意事項(xiàng),希望對(duì)大家實(shí)用mysql能夠有所幫助2016-12-12MySQL 5.7開(kāi)啟并查看biglog的詳細(xì)教程
binlog 就是binary log,二進(jìn)制日志文件,這個(gè)文件記錄了MySQL所有的DML操作,通過(guò)binlog日志我們可以做數(shù)據(jù)恢復(fù),增量備份,主主復(fù)制和主從復(fù)制等等,本文給大家介紹了MySQL 5.7開(kāi)啟并查看biglog的詳細(xì)教程,需要的朋友可以參考下2024-03-03Jaspersoft?Studio添加mysql數(shù)據(jù)庫(kù)配置步驟
這篇文章主要為大家介紹了Jaspersoft?Studio添加mysql數(shù)據(jù)庫(kù)配置的步驟過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02調(diào)用MySQL中數(shù)據(jù)庫(kù)元數(shù)據(jù)的方法
這篇文章主要介紹了調(diào)用MySQL中數(shù)據(jù)庫(kù)元數(shù)據(jù)的方法,文中給出了了PHP和Perl腳本下的調(diào)用示例,需要的朋友可以參考下2015-05-05