После 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.
Я проверил и дважды проверил выражение, но не могу понять, что я делаю неправильно.
Это не влияет на несколько строк или отдельных строк.
Поле longtext - это то, что имеет значение?
Есть идеи?
Вы можете попробовать следующее:
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
.
SELECT * FROM CONTACTS WHERE TRIM(NOTES) LIKE '%- - - -%';
Одна возможность состоит в том, что пробел может фактически быть не печатным символом.