文字列CONCATが追加されたフィールドのSQL UPDATEすべての値が機能しない


159

これが私がやりたいことです:

現在のテーブル:

+----+-------------+  
| id | data        |  
+----+-------------+  
|  1 | max         |  
|  2 | linda       |  
|  3 | sam         |  
|  4 | henry       |  
+----+-------------+  

ミステリークエリ(のようなもの"UPDATE table SET data = CONCAT(data, 'a')"

結果のテーブル:

+----+-------------+  
| id | data        |  
+----+-------------+  
|  1 | maxa        |  
|  2 | lindaa      |  
|  3 | sama        |  
|  4 | henrya      |  
+----+-------------+  

それでおしまい!単一のクエリでそれを行う必要があるだけですが、方法を見つけることができないようです。私はブルーホストでmySQLを使用しています(バージョン4.1だと思います)

みんな、ありがとう。


5
実際にクエリを試しましたか?「正常に動作する」はずです
Phil

はい、試しました。私もそれはうまくいくはずだと思いました。
Fresheyeball 2010年

ここに私の「現実の」リターンがあります:[SQL] UPDATEquestions_national SET cat_id = CONCAT(cat_id、 'a')影響を受ける行:0時間:0.069ms
Fresheyeball

あるcat_id文字フィールド(varchar型、テキストなど)または数値は?
Phil

罰金...作品「『』データ+ =更新トンセットデータを」私が試したので(SQL 2012)私のために働いていなかった
シルバー

回答:


257

それだけで十分です。

mysql> select * from t;
+------+-------+
| id   | data  |
+------+-------+
|    1 | max   |
|    2 | linda |
|    3 | sam   |
|    4 | henry |
+------+-------+
4 rows in set (0.02 sec)

mysql> update t set data=concat(data, 'a');
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> select * from t;
+------+--------+
| id   | data   |
+------+--------+
|    1 | maxa   |
|    2 | lindaa |
|    3 | sama   |
|    4 | henrya |
+------+--------+
4 rows in set (0.00 sec)

5.1.41でテストしていますが、なぜ問題が発生するのかわかりません。


1
concat- 4.1の機能は同じに見えますdev.mysql.com/doc/refman/4.1/en/...
フィル・

12
解決しました。列が受け入れる文字の制限されたセットがあり、それを変更したことが判明し、クエリは正常に機能します。
Fresheyeball

二重引用符をすべて単一引用符に置き換えたいという点を除いて、私は多少同じシナリオを持っています。どのようにすればそれを行うことができますか?
Shaonline 2017

これは良い答えでしたが、私のサーバーでは「データ」がキーワードだったので少し混乱しました。たぶんあまりあいまいな例は次のようになりますUPDATE table SET column_name=concat(column_name, 'string');
Kikyロドリゲス

38

null値を持つCONCATはnullを返すため、最も簡単な解決策は次のとおりです。

UPDATE myTable SETスペア= IFNULL(CONCAT(スペア、 "文字列")、 "文字列")


11
UPDATE mytable SET spares = CONCAT(spares, ',', '818') WHERE id = 1

私のために働いていません。

スペアはNULLデフォルトですが、そのvarchar


5
値がデフォルトでNULLの場合は機能しないようです。空の文字列である必要があります
DS_web_developer '23

9

NULLラップして空の文字列で値を変換するCOALESCE

"UPDATE table SET data = CONCAT(COALESCE(`data`,''), 'a')"

または

代わりにCONCAT_WSを使用します。

"UPDATE table SET data = CONCAT_WS(',',data, 'a')"

8

解決しました。列が受け入れる文字の制限されたセットがあり、それを変更したことが判明し、クエリは正常に機能します。


8
UPDATE 
    myTable
SET 
    col = CONCAT( col , "string" )

うまくいきませんでした。リクエストの構文は正しいですが、実行すると「0行が影響を受けました」。

解決策は:

UPDATE 
    myTable 
SET 
    col = CONCAT( myTable.col , "string" )

それはうまくいった。


2

あなたはこれを行うことができます:

Update myTable
SET spares = (SELECT CASE WHEN spares IS NULL THEN '' ELSE spares END AS spares WHERE id = 1) + 'some text'
WHERE id = 1

フィールドがnullの場合、フィールド=フィールド+値は機能しません。


mysqlで+を文字列で本当に使用できますか?
Sudhir N 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.