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.


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


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")


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

tidak bekerja untukku.

suku cadang secara NULLdefault tetapivarchar


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')"

8

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


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.


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.


Bisakah Anda benar-benar menggunakan + dengan string di mysql?
— Sudhir N
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.