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

时间:2018-06-29 08:31:33

标签: mysql replace longtext

在从其他各个字段进行一次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.

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

它不会影响多行或单行。

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

有什么想法吗?

2 个答案:

答案 0 :(得分: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.  |
+------+------------------------------+

答案 1 :(得分:0)

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

只需在不使用百分号的情况下使用它,并在需要时在其之前/之后添加其他空格:

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

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