как заменить определенное значение столбца в MYSQL?

0

как заменить определенное значение столбца. например, у меня есть три строки значений в таблице:

id_tweet: 1
status_user: RT @username1: success rta: P

id_tweet: 2
status_user: RT @username2: happy rta: D

id_tweet: 3
status_user: amen

из трех записей выше Я хочу заменить или удалить текст retweet в столбце status_user, чтобы:

after replace:

id_tweet: 1
status_user: success rta: P

id_tweet: 2
status_user: happy rtx: D

id_tweet: 3
status_user: amen

но у меня есть ограничения. Я думаю, что я могу использовать запрос функции замены на mysql следующим образом:

UPDATE tes_tbl_status
SET status_user = (SELECT REPLACE (status_user, '?', '') FROM 
tes_tbl_status WHERE status_user LIKE 'RT%:%')
WHERE status_user LIKE 'RT%:%';

Информация: '?' = RT @...:

запрос выше, заменив определенное значение в столбце status_user пустым строковым значением, однако я пока не знаю, как получить текстовое значение

RT @...:

который будет заменен пустой строкой. у кого есть идеи или решения по моей проблеме?

Теги:
database

1 ответ

0
Лучший ответ

Если вы хотите всегда удалять RT @...: части, функции SUBSTRING_INDEX, CONCAT и REPLACE mysql есть для вашей помощи. Использование SUBSTRING_INDEX вы можете извлечь RT @... подстроку, что вы можете Concat двоеточие (:) и применить этот результат в REPLACE функции в качестве from_str параметра следует заменить пустой строкой.

Вот код, который для вас делает обновление:

UPDATE t
SET status_user = TRIM(REPLACE(status_user, CONCAT(SUBSTRING_INDEX(status_user, ':', 1),':'), ''))
WHERE status_user LIKE 'RT%';

Результат:

+----------+----------------+
| id_tweet | status_user    |
+----------+----------------+
|        1 | success rta: P |
|        2 | happy rta: D   |
|        3 | amen           |
+----------+----------------+

Обратите внимание на TRIM который я использовал для удаления верхнего и конечного пробелов (если они существуют).

См. Демо-версию sqlfiddle.

DDL:

CREATE TABLE t (
  id_tweet INT UNSIGNED NOT NULL,
  status_user TEXT NOT NULL
);

INSERT INTO t (id_tweet, status_user) VALUES
(1, 'RT @username1: success rta: P'),
(2, 'RT @username2: happy rta: D'),
(3, 'amen');

Также есть хорошая библиотека mysql udf (lib_mysqludf_preg), которая может оснастить ваш mysql функциональными возможностями PCRE.

  • 0
    Благодарю. Можете ли вы дать мне ссылку, связанную с вашим запросом.
  • 0
    Вы имеете в виду SUBSTRING_INDEX и другие функции mysql sring ?

Ещё вопросы

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