2017-10-05 332 views
0

我想更改job_title中的所有單詞。使用MySQL UPDATE多次更新同一行中的同一列

job_title我下面的例子是:

86619art department work experience/greenswoman

下面是代碼:

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

+0

它看起來像你特別過濾所有'job_title_id = 86619'。那會是「Greenswoman」的'job_title_id'嗎? – theGleep

+0

是的。我想更改行86619的job_title列中的所有單詞。LOWER()是此處出現問題的原因。我試圖做一個不區分大小寫的REPLACE,這樣greensWoman會變成Greenswoman。我想要的結果是'藝術部門工作經驗/綠女' –

+0

啊......這是有道理的。您在單個字段中更新多個值,而不是多個字段。 – theGleep

回答

0

該行爲是由更新語句中的LOWER(job_title)函數調用引起的,因爲它將整個作業標題轉換爲小寫,因此可以根據代碼中以前的任何更新所做的更改進行刪除。您必須從代碼中刪除lower()函數。

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

我添加了lower(),因爲我想忽略job_title中的大小寫。我希望能夠將greensWoman改爲Greenswoman。如何在使用replace()時忽略大小寫? –

+0

如果您有後續問題,請將其作爲新問題提出,而不是發表評論。 – Shadow

0

MySQL的REPLACE()函數不區分大小寫。

我發現這個博客關於創建一個存儲函數來做不區分大小寫的字符串替換的用戶。這很尷尬。 https://pento.net/2009/02/15/case-insensitive-replace-for-mysql/

對於這項任務,如果您有特殊的字符串比較要求,您可能會發現只寫一個腳本來一次只做一行就更容易。