SQL MEMPERBARUI semua nilai dalam bidang dengan string yang ditambahkan CONCAT tidak berfungsi

159

Inilah yang ingin saya lakukan:

tabel saat ini:

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

Mystery Query (sesuatu seperti "UPDATE table SET data = CONCAT(data, 'a')")

tabel yang dihasilkan:

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

itu dia! Saya hanya perlu melakukannya dalam satu permintaan, tetapi sepertinya tidak bisa menemukan jalan. Saya menggunakan mySQL di bluehost (saya pikir versinya 4.1)

Terimakasih semuanya.

Bola mata baru
sumber
5
Sudahkah Anda mencoba kueri Anda? Seharusnya "hanya berfungsi"
Phil
Ya saya sudah mencobanya. Saya pikir itu harusnya berfungsi juga.
Fresheyeball 8-10
di sini adalah 'kehidupan nyata' saya kembali: [SQL] UPDATE questions_national SET cat_id = CONCAT (cat_id, 'a') Baris yang terpengaruh: 0 Waktu: 0.069ms
Fresheyeball
Apakah cat_idbidang karakter (varchar, teks, dll) atau numerik?
Phil
tidak berfungsi untuk saya (SQL 2012), jadi saya mencoba "perbarui t set data = data + 'a'" berfungsi dengan baik ..
Perak

Jawaban:

258

Cukup banyak yang Anda butuhkan:

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)

Tidak yakin mengapa Anda akan mengalami masalah, meskipun saya menguji ini pada 5.1.41

Marc B
sumber
1
The concatfungsi dalam 4.1 terlihat sama - dev.mysql.com/doc/refman/4.1/en/...
Phil
12
Selesaikan itu. Ternyata kolom memiliki serangkaian karakter yang akan diterima, mengubahnya, dan sekarang kueri berfungsi dengan baik.
Fresheyeball
Saya memiliki senario yang agak sama, kecuali saya ingin mengganti semua tanda kutip ganda dengan tanda kutip tunggal. Ada saran bagaimana saya bisa melakukannya?
Shaonline
Ini adalah jawaban yang bagus, tetapi sedikit membingungkan, karena di server saya 'data' adalah kata kunci. Mungkin contoh yang kurang ambigu adalah:UPDATE table SET column_name=concat(column_name, 'string');
Kiky Rodriguez
38

CONCAT dengan nilai nol mengembalikan nol, sehingga solusi termudah adalah:

UPDATE myTable SET suku cadang = IFNULL (CONCAT (suku cadang, "string"), "string")

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

tidak bekerja untukku.

suku cadang secara NULLdefault tetapivarchar

DS_web_developer
sumber
5
tampaknya, bahwa jika nilai NULL secara default tidak berfungsi. itu harus berupa string kosong
DS_web_developer
9

konversi NULLnilai dengan string kosong dengan membungkusnyaCOALESCE

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

ATAU

Gunakan CONCAT_WS sebagai gantinya:

"UPDATE table SET data = CONCAT_WS(',',data, 'a')"
Rohan Khude
sumber
8

Selesaikan itu. Ternyata kolom itu memiliki serangkaian karakter yang akan diterima, mengubahnya, dan sekarang kueri berfungsi dengan baik.

Bola mata baru
sumber
8
UPDATE 
    myTable
SET 
    col = CONCAT( col , "string" )

Tidak bisa menyelesaikannya. Sintaks permintaan sudah benar, tetapi "0 line terpengaruh" saat dijalankan.

Solusinya adalah:

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

Yang itu berhasil.

Jeremy Thille
sumber
2

Kamu bisa melakukan ini:

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

bidang = bidang + nilai tidak berfungsi saat bidang nol.

Eric
sumber
Bisakah Anda benar-benar menggunakan + dengan string di mysql?
Sudhir N