使用MySQL UPDATE多次更新同一行中的同一列

时间:2017-10-05 21:12:16

标签: mysql sql-update

我想更改job_title中的所有字词。

在下面的示例中,job_title是:

art department work experience/greenswoman中的

86619

以下是代码:

Set autocommit = 1;

UPDATE tvt_job_title SET job_title = REPLACE(LOWER(job_title),'art','Art') WHERE job_title_id = 86619; UPDATE tvt_job_title SET job_title = REPLACE(LOWER(job_title),'work','Work') WHERE job_title_id = 86619; UPDATE tvt_job_title SET job_title = REPLACE(LOWER(job_title),'department','Department') WHERE job_title_id = 86619; UPDATE tvt_job_title SET job_title = REPLACE(LOWER(job_title),'experience','Experience') WHERE job_title_id = 86619; UPDATE tvt_job_title SET job_title = REPLACE(LOWER(job_title),'greenswoman','Greenswoman') WHERE job_title_id = 86619;

select job_title from tvt_job_title where job_title_id = 86619;

结果:

art department work experience/Greenswoman 只有Greenswoman得到纠正!为什么所有的字都没有得到纠正?

输出:

UPDATE tvt_job_title SET job_title = REPLACE(LOWER(job_title),'art','Art') WHERE job_title_id = 86619 1 row(s) affected Rows matched: 1 Changed: 1 Warnings: 0

UPDATE tvt_job_title SET job_title = REPLACE(LOWER(job_title),'work','Work') WHERE job_title_id = 86619 1 row(s) affected Rows matched: 1 Changed: 1 Warnings: 0

UPDATE tvt_job_title SET job_title = REPLACE(LOWER(job_title),'department','Department') WHERE job_title_id = 86619 1 row(s) affected Rows matched: 1 Changed: 1 Warnings: 0

UPDATE tvt_job_title SET job_title = REPLACE(LOWER(job_title),'experience','Experience'), abbreviation = REPLACE(LOWER(abbreviation),'experience','Experience') WHERE job_title_id = 86619 1 row(s) affected Rows matched: 1 Changed: 1 Warnings: 0

UPDATE tvt_job_title SET job_title = REPLACE(LOWER(job_title),'greenswoman','Greenswoman'), abbreviation = REPLACE(LOWER(abbreviation),'greenswoman','Greenswoman') WHERE job_title_id = 86619 1 row(s) affected Rows matched: 1 Changed: 1 Warnings: 0

select job_title from tvt_job_title where job_title_id = 86619 1 row(s) returned

2 个答案:

答案 0 :(得分:0)

行为是由update语句中的LOWER(job_title)函数调用引起的,因为它将整个作业标题转换为小写,因此根除了代码中任何先前更新所做的更改。您必须从代码中删除lower()函数。

UPDATE tvt_job_title SET job_title = 
REPLACE(job_title,'work','Work') WHERE job_title_id = 86619

答案 1 :(得分:0)

MySQL的REPLACE()函数不区分大小写。

我发现这个博客是关于创建存储函数的用户进行不区分大小写的字符串替换。这很尴尬。 https://pento.net/2009/02/15/case-insensitive-replace-for-mysql/

对于此任务,如果您有特殊的字符串比较要求,您可能会发现编写脚本一次一行更容易。