簡體   English   中英

Mysql刪除逗號分隔字符串中的特定單詞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM