如何替换列的某个值。例如,我在表中有三行值:
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
上面三条记录中的我想将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上使用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_user列中的某个值来查询上面的内容,但是我还不知道如何检索文本值
RT @ ...:
将替换为空字符串。任何人对我的问题都有任何想法或解决方案吗?
答案 0 :(得分: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 demo here 。
<强> 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模式匹配功能。