如何在MYSQL中替换某列的某个值?

时间:2018-01-13 10:18:57

标签: mysql database

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

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 @ ...:

将替换为空字符串。任何人对我的问题都有任何想法或解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果您想要永久删除RT @...:部分,SUBSTRING_INDEXCONCATREPLACE 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模式匹配功能。