MySQL заменяет часть строки (длинный текст)

0

После 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 - это то, что имеет значение?

Есть идеи?

Теги:
replace

2 ответа

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.  |
+------+------------------------------+
  • 0
    ОК, здесь очень странное поведение. Само по себе это предложение не работает, но работает, если я просто ищу один '-', где он заменяет все экземпляры !! Я просмотрел все результаты и согласился на замену «-» для «», которая устраняет большинство дубликатов.
  • 0
    Вы можете попробовать выполнить этот запрос, чтобы увидеть, сколько записей являются кандидатами на обновление. SELECT * FROM CONTACTS WHERE TRIM(NOTES) LIKE '%- - - -%'; Одна возможность состоит в том, что пробел может фактически быть не печатным символом.
Показать ещё 2 комментария
0

Вы пытаетесь заменить этот %- - - -% на -. В ваших данных образца нет % знаков. Вероятно, вы ошибаетесь в знаке % который соответствует любой последовательности из нуля или более символов в выражении LIKE.

Просто используйте его без знака процента и добавьте дополнительные пробелы до/после, если необходимо:

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

Если вам нужна более сложная логика и есть MySQL версии 8. 0+, то вы можете использовать функцию REGEXP_REPLACE.

  • 0
    Спасибо, но это была моя первая попытка, и она не работает без подстановочных знаков: /
  • 0
    Моя версия MySQL 5.0.27 - не злоупотребляйте, пожалуйста! Этот процесс фактически обновляет БД и интерфейс перед обновлением всей ЛАМПЫ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню