mysql替换字符串的一部分(longtext)

tv6aics1  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(515)

在从不同的其他字段合并之后,我正在尝试清理数据-特别是删除多个分隔符。。。但它会影响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.

我检查了一遍又一遍,但不知道我做错了什么。
它不影响多行或单个行。
这个领域是长期的,这有什么区别吗?
有什么想法吗?

2nc8po8w

2nc8po8w1#

你可以试试这个:

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.  |
+------+------------------------------+
ztyzrc3y

ztyzrc3y2#

你想替换这个 %- - - -%- . 在您的示例数据中没有 % 标志。你可能把它弄错了 % 一个符号,它匹配任何由零个或多个字符组成的序列 LIKE 表情。
只需使用它,不带百分号,如果需要,在前面/后面添加额外的空格:

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

如果您需要更复杂的逻辑,并且有mysql版本8.0+,那么您可以使用 REGEXP_REPLACE 功能。

相关问题