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. |
+------+------------------------------+
在来自其他各个字段的 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. |
+------+------------------------------+