MySQL 替换部分字符串(长文本)

MySQL Replace Part of String (Longtext)

在来自其他各个字段的 CONCAT 之后,我正在尝试清理数据 - 特别是删除多个分隔符...但它影响了 0 条记录(几千条记录中)

UPDATE CONTACTS
SET NOTES = REPLACE(NOTES, "%- - - -%", "-")
WHERE NOTES = 53388 LIMIT 1

'where'只是为了测试。

之前的例子

ID | NOTES
1 | - - - - Hi there
2 | Sun is hot today - - - -
3 | Nice - - - - to be on Whosebug
4 | This record is just - fine.

要求的结果

ID | NOTES
1 |  Hi there
2 | Sun is hot today 
3 | Nice  to be on Whosebug
4 | This record is just - fine.

我已经检查并仔细检查了声明,但无法弄清楚我做错了什么。

它不会影响多行或单个行。

字段是长文本有什么区别吗?

有什么想法吗?

您正在尝试将此 %- - - -% 替换为 -。在您的样本数据中没有 % 标志。你可能把它误认为是 % 符号,它匹配 LIKE 表达式中零个或多个字符的任意序列。

不用百分号就可以,如果需要可以加空格before/after:

REPLACE(NOTES, "- - - -", "-")

如果您需要更复杂的逻辑并且拥有 MySQL 8.0+ 版本,那么您可以使用 REGEXP_REPLACE 函数。

你可以试试这个:

UPDATE CONTACTS SET NOTES = REPLACE(TRIM(NOTES),'- - - -','');

结果:

之前:

SELECT * FROM CONTACTS;
+------+-------------------------------------+
| ID   | NOTES                               |
+------+-------------------------------------+
|    1 | - - - - Hi there                    |
|    2 | Sun is hot today - - - -            |
|    3 | Nice - - - - to be on Whosebug |
|    4 | This record is just - fine.         |
+------+-------------------------------------+

之后:

SELECT * FROM CONTACTS;
+------+------------------------------+
| ID   | NOTES                        |
+------+------------------------------+
|    1 |  Hi there                    |
|    2 | Sun is hot today             |
|    3 | Nice  to be on Whosebug |
|    4 | This record is just - fine.  |
+------+------------------------------+