[英]Mysql remove the specific word in comma seperated string
我的表有這樣的“標簽”字段:
標簽 1、標簽 2、標簽 3
如何使用 mysql 查詢刪除 ',tag2' 包括逗號。
我認為對此類問題的最佳答案是以下鏈接從 SET 字段中刪除值的最佳方法?
查詢應該是這樣的,它涵蓋了 ,value 或 value,或僅包含逗號分隔列中的值
UPDATE yourtable SET categories = TRIM(BOTH ',' FROM REPLACE(CONCAT(',', col, ','), ',2,', ',')) WHERE FIND_IN_SET('2', categories)
在這里,您可以在 where 子句中設置您的條件。 有關更多詳細信息,請參閱上面的鏈接。
除了我沒有測試的第一個答案,因此我沒有意見,其他答案在以下情況下會失敗:
1- tags = "tag1,tag2,tag22,tag3"
2- tags = "tag2,tag1,tag3"
在第一個示例中, REPLACE(tags, 'tag2', '') 函數將刪除第三個逗號分隔值,即 tag22,並且在第二個示例中 tag2 不會被 REPLACE(tags, ',tag2', '')
一種可能的解決方案是:
REPLACE(REPLACE(CONCAT(',', tags, ','), 'tag2', ''), ',,', ',')
我的解決方案的問題是,您最終總是會在字符串的開頭和結尾處存儲帶有冗余逗號的值。 但就我而言,它運行良好。
對於 SET 數據類型,您可以使用這樣的東西 -
CREATE TABLE sets(tags SET('tag1','tag2','tag3'));
INSERT INTO sets VALUES
('tag1,tag2'),
('tag1,tag3,tag2'),
('tag2,tag3'),
('tag3,tag1');
UPDATE sets SET tags = tags &~ (1 << FIND_IN_SET('tag2', tags) - 1);
SELECT * FROM sets;
+-----------+
| tags |
+-----------+
| tag1 |
| tag1,tag3 |
| tag3 |
| tag1,tag3 |
+-----------+
快速提示:
UPDATE sets SET tags = tags &~ (1 << FIND_IN_SET('tag2', tags) - 1);
當您的集合看起來像:'tag1','tag2','tag3' 時不起作用
'tag3' 將被此操作丟失
我最終使用了一個簡單的雙重替換:
UPDATE sets SET tags = replace(replace(tags, 'tag2', ''), ',,', '')
換行替換從只替換 'tag2' 中刪除剩余的逗號,因為您無法確定您的 tagg 是該集合的第一個還是最后一個項目
關於 tag22 留下 2 的情況,在沒有像 OP 那樣前導零的情況下這樣做,無論如何你都會遇到麻煩
在 MySQL 中使用替換功能:
replace(FIELD_NAME, ‘find this string’, ‘replacement string’);
所以在你的情況下:
SELECT REPLACE('tag1,tag2,tag3', ',tag2', '');
有關更多詳細信息,請查看: http : //dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace
我找到了一個解決方案,但很想知道是否有更簡單的方法... SELECT TRIM(BOTH ',' FROM (SELECT REPLACE(REPLACE('tag1,tag2,tag3','tag2',''),',,',',')))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.