如何替换mysql中某列的某个值?

vsnjm48y  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(355)

如何替换列的某个值。例如,我有三行值​​在表格中:

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

在上述三条记录中,我希望替换或删除“状态\用户”列中的转发文本,以便:

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上使用replace函数查询,如下所示:

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\u user列中的某个值替换为空字符串值来进行上述查询,但是我还不知道如何检索文本值
rt@…:
将替换为空字符串。有人对我的问题有什么想法或解决办法吗?

bzzcjhmw

bzzcjhmw1#

如果你想移除 RT @...: 零件,零件 SUBSTRING_INDEX , CONCAT 以及 REPLACE mysql函数正在那里为您提供帮助。使用 SUBSTRING_INDEX 你可以提取 RT @... 可以用冒号连接的子字符串( : )并将此结果应用于 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\u mysqludf\u preg),它可以为您的mysql配备pcre模式匹配功能。

相关问题