0

在来自其他各个领域的 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 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.

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

它不会影响多行或单行。

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

有任何想法吗?

4

2 回答 2

1

你可以试试这个:

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.  |
+------+------------------------------+
于 2018-06-29T08:44:12.457 回答
0

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

只需在没有百分号的情况下使用它,并在需要时在之前/之后添加额外的空格:

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

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

于 2018-06-29T08:36:47.023 回答