溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SQL查詢之字段是逗號(hào)分隔開的數(shù)組怎么查詢匹配數(shù)據(jù)

發(fā)布時(shí)間:2023-03-06 11:37:40 來(lái)源:億速云 閱讀:237 作者:iii 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章主要介紹“SQL查詢之字段是逗號(hào)分隔開的數(shù)組怎么查詢匹配數(shù)據(jù)”,在日常操作中,相信很多人在SQL查詢之字段是逗號(hào)分隔開的數(shù)組怎么查詢匹配數(shù)據(jù)問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”SQL查詢之字段是逗號(hào)分隔開的數(shù)組怎么查詢匹配數(shù)據(jù)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

    字段是逗號(hào)分隔開的數(shù)組如何查詢匹配數(shù)據(jù)

    方式一:CHARINDEX***()*****

    SELECT
        * 
    FROM
        U_PUR1 
    WHERE
        CHARINDEX( ',' + '100306' + ',', ',' + DeptCode + ',' ) >0

    匹配字符串開始位置的函數(shù) CHARINDEX(str1,str,[start])

    CHARINDEX(str1,str,[start]) 函數(shù)返回子字符串 str1 在字符串 str 中的開始位置,start 為搜索的開始位置,如果指定 start 參數(shù),則從指定位置開始搜索;如果不指定 start 參數(shù)或者指定為0或者負(fù)值,則從字符串開始位置搜索。

    方式二:WHERE LIKE

    SELECT
        * 
    FROM
        U_PUR1 
    WHERE
        ',' + DeptCode + ',' LIKE '%,' + '100306' + ',%';

    Where Like 的方式顯然更好理解一些,首先在字段收尾加上逗號(hào),這樣可以使得字段中每一個(gè)值都擁有完整的格式,再使用Like進(jìn)行模糊匹配時(shí),可以使首尾的值都能匹配到。

    Mysql逗號(hào)分隔的字段查詢

    在工作中,經(jīng)常會(huì)遇到一對(duì)多的關(guān)系,比如用戶和愛好。想要在mysql中保存這種關(guān)系,一般有兩種方式,一種是建立一張用戶愛好表user_hobby(user_id, hobby_id),這樣一條user_id就會(huì)存在多條記錄。

    或者采用第二種方式,直接在用戶表中增加hobby_ids字段,將hobby_id拼接成用逗號(hào)分隔的字符串保存起來(lái)。

    那么問題來(lái)了,如果采用第二種方式的話,查詢的時(shí)候要如何處理呢?下面介紹幾種常見的處理方式。

    1.like

    可能最新想到的是采用like的形式,如下:

    select * from user where hobby_ids like '%1%';

    這種方式是否可行呢? 行,但是有適用范圍,如果hobby_id在10以內(nèi),那么這么處理完全是可以的,但是一旦超過(guò)了10,那'%1%'就會(huì)把10,11,這些帶1的id全都匹配處理。

    2.find_in_set

    為了解決like存在的問題,還可以使用mysql提供的find_in_set(str, strlist),sql可以這樣寫:

    select * from user where find_in_set('1', hobby_ids);

    這樣mysql就會(huì)把hobby_ids的值,按照逗號(hào)分隔的一個(gè)個(gè)元素去匹配。如果我們要匹配多個(gè)值要怎么辦呢,比如查找喜歡1-籃球或2-足球的用戶,可以

    select * from user where find_in_set('1', hobby_ids) or find_in_set('2', hobby_ids);

    如果匹配的值較多,我們可能要拼很長(zhǎng)的sql,那有沒有稍微簡(jiǎn)短的方式呢,我們可以采用下面的方式。

    3.regexp

    regexp是mysql提供的強(qiáng)大的正則匹配方式。上面的sql就可以改寫成:

    select * from user where hobby_ids regexp '(^|,)(1|2)(,|$)';

    這里是完全采用字符串正則匹配的方式,(1|2)表示匹配1或者2,(^|,)表示數(shù)字前面必須是字符串開頭或者是一個(gè)逗號(hào),(,|$)表示數(shù)字后面必須是逗號(hào)或者字符串的結(jié)尾。這樣就可以完整匹配逗號(hào)分隔的元素了。

    到此,關(guān)于“SQL查詢之字段是逗號(hào)分隔開的數(shù)組怎么查詢匹配數(shù)據(jù)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    sql
    AI