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



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

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

"位置"仅用于测试。

之前的示例

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

所需结果

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

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

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

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

有什么想法吗?

你可以试试这个:

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 stackoverflow |
|    4 | This record is just - fine.         |
+------+-------------------------------------+

后:

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

您正在尝试将此%- - - -%替换为-。在示例数据中,没有%符号。您可能将其误认为%符号与表达式中任何零个或多个字符的序列匹配LIKE符号。

只需不带百分号使用它,并在需要时在之前/之后添加额外的空格:

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

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

最新更新