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.