在从其他各个字段进行一次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.
我已经检查并仔细检查了该语句,但无法弄清楚我在做什么错。
它不会影响多行或单行。
长文本字段有什么区别吗?
有什么想法吗?
答案 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
函数。