溫馨提示×

溫馨提示×

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

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

mysql中的find_in_set字符串查找函數(shù)怎么用

發(fā)布時間:2022-08-29 16:58:36 來源:億速云 閱讀:136 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“mysql中的find_in_set字符串查找函數(shù)怎么用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“mysql中的find_in_set字符串查找函數(shù)怎么用”吧!

    需求

    系統(tǒng)中,不論是訂單還是退貨單,有的平臺使用需要賣家審核,有的則不需要,所以在系統(tǒng)中可以設(shè)置訂單或退貨單的流程節(jié)點(diǎn)。

    而對于每個流程節(jié)點(diǎn),客戶需求是每個節(jié)點(diǎn)都要根據(jù)系統(tǒng)下的員工的角色去做分發(fā),從而訂單指定到個人,而不是整個公司的員工都可以處理。

    方案

    對于上述場景,我實(shí)現(xiàn)的方案是在訂單表和退貨單表都增加了對應(yīng)節(jié)點(diǎn)待處理人字段,多個人可處理的話,則用,分隔,保存對應(yīng)員工的id集合。

    所以,在查詢訂單的方法上我們也需要進(jìn)行對應(yīng)的修改,每個人只能看到自己可處理的訂單。

    表內(nèi)容樣例如下:

    mysql中的find_in_set字符串查找函數(shù)怎么用

    員工登錄系統(tǒng),我們可以得到其對應(yīng)的id,而我們需要將其id去對應(yīng)的字段查找,是否在業(yè)務(wù)審核,財(cái)務(wù)審核或發(fā)貨人的集合中。這時候,SQL該怎么改?

    函數(shù)

    在改SQL之前,我想的是,之前總結(jié)過MYSQL的很多函數(shù),而對于上面的實(shí)現(xiàn),MYSQL中肯定會有對應(yīng)的函數(shù)幫助我們實(shí)現(xiàn)。果真,被我查到了。

    1. 介紹

    MySQL提供了一個名為FIND_IN_SET()的內(nèi)置字符串函數(shù),允許您在逗號分隔的字符串列表中查找指定字符串的位置。

    2. 語法:FIND_IN_SET(needle,haystack)

    FIND_IN_SET()函數(shù)接受兩個參數(shù):

    • needle是要查找的字符串。

    • haystack是要搜索的逗號分隔的字符串列表。

    FIND_IN_SET()函數(shù)根據(jù)參數(shù)的值返回一個整數(shù)或一個NULL值:

    • 如果needle或haystack為NULL,則函數(shù)返回NULL值。

    • 如果needle不在haystack中,或者h(yuǎn)aystack是空字符串,則返回零。

    • 如果needle在haystack中,則返回一個正整數(shù)。

    3. 實(shí)戰(zhàn)

    下面是項(xiàng)目中查編號為8910的員工可處理的待業(yè)務(wù)審核的訂單SQL:

    SELECT
    	t.id_,t.order_sn,t.create_time, t.business_employee_ids,cus.customer_title
    FROM
    	wms_orders t
    LEFT JOIN wms_customer cus ON cus.id = t.buyer_id
    WHERE
    	t.order_status != 100
    AND t.comp_id = 8815
    AND FIND_IN_SET(
    	'8910',
    	t.business_employee_ids
    )
    AND t.order_status = 14
    AND (
    	t.parent_order_sn IS NULL
    	OR t.parent_order_sn = ''
    )
    ORDER BY
    	t.id_ DESC

    結(jié)果如下:

    mysql中的find_in_set字符串查找函數(shù)怎么用

    上面結(jié)果截圖中,框出的三條訂單,id為6594,6523,6373是只有員工編號為8910能處理的,我們將上面的SQL員工編號改為8912,則此三條訂單應(yīng)該是不在結(jié)果范圍內(nèi)的, 從而驗(yàn)證使用此函數(shù)查詢是否可行。

    查詢結(jié)果如下:

    mysql中的find_in_set字符串查找函數(shù)怎么用

    結(jié)果證明查詢是沒有問題的。

    插曲

    前兩天,有個同事在群里發(fā)了個截圖,問了個問題,如下:

    mysql中的find_in_set字符串查找函數(shù)怎么用

    簡單描述下:

    圖片地址那一列存的是我們的舊數(shù)據(jù)中心的地址,而現(xiàn)在新數(shù)據(jù)中心上線了,所以需要統(tǒng)一替換成新的地址獲取圖片。

    看完后,我就想到了之前用到過MYSQL中的REPLACE()函數(shù),可以做到將字符串替換。所以,update的語句如下:

    UPDATE wms_platform_wear_brand
    SET brand_img = REPLACE (
    	brand_img,
    	"http://***/udata/interface/timer/pic/getAttachPic.do?attachId=",
    	"wms/orderGoods.do?method=getAttachPic&attachId="
    )

    感謝各位的閱讀,以上就是“mysql中的find_in_set字符串查找函數(shù)怎么用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對mysql中的find_in_set字符串查找函數(shù)怎么用這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

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

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

    AI