在来自其他各个字段的 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
函数。