Eklenen CONCAT dizesi ile bir alandaki tüm değerleri SQL UPDATE çalışmıyor


160

İşte yapmak istediğim şey:

geçerli tablo:

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

Gizem Sorgusu (benzeri bir şey "UPDATE table SET data = CONCAT(data, 'a')")

sonuçta ortaya çıkan tablo:

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

bu kadar! Sadece tek bir sorguda yapmam gerekiyor, ancak bir yol bulamıyorum. MySQL'i bluehost üzerinde kullanıyorum (4.1 sürümünü düşünüyorum)

Herkese teşekkürler.


5
Sorgunuzu gerçekten denediniz mi? "Sadece çalışması gerekir"
Phil

Evet denedim. Ben de işe yarayacağını düşündüm.
Fresheyeball

Burada benim 'gerçek hayat' geri dönüşüdür: [SQL] UPDATE questions_national SET cat_id = CONCAT (cat_id, 'a') Etkilenen satırlar: 0 süre: 0.069ms
Fresheyeball

cat_idbir karakter alanı (varchar, metin, vb) veya sayısal?
Phil

benim için çalışma değildi (SQL 2012) bu yüzden "güncelleme t set veri = veri + 'a'" iyi çalıştı ..
Gümüş

Yanıtlar:


258

İhtiyacınız olan hemen hemen hepsi bu:

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)

Neden sorun yaşayacağınızdan emin değilim, ancak bunu 5.1.41'de test ediyorum


1
concat- 4.1 işlevi aynı görünüyor dev.mysql.com/doc/refman/4.1/en/...
Phil

12
Çözüldü. Sütunun, kabul edeceği sınırlı bir karakter kümesine sahip olduğu ortaya çıktı, değiştirdi ve şimdi sorgu düzgün çalışıyor.
Fresheyeball

Tek tırnak ile tüm çift tırnak değiştirmek istiyorum hariç, ben aynı senario biraz var. Herhangi bir öneri bunu nasıl yapabilirim?
Shaonline

Sunucumda 'veriler' bir anahtar kelime olduğu için bu iyi bir cevaptı, ancak biraz kafa karıştırıcıydı. Belki daha az belirsiz bir örnek:UPDATE table SET column_name=concat(column_name, 'string');
Kiky Rodriguez

38

Null değeri olan CONCAT null değerini döndürür, böylece en kolay çözüm:

UPTATE myTable SET yedekleri = IFNULL (CONCAT (yedekler, "dize"), "dize")


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

benim için çalışmıyor.

yedekler NULLvarsayılan olarakvarchar


5
Öyle görünüyor ki, değer varsayılan olarak NULL ise çalışmaz. boş bir dize olmalı
DS_web_developer

9

NULLdeğerleri içine boş bir dize ile dönüştürerekCOALESCE

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

VEYA

Kullanım CONCAT_WS yerine:

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

8

Çözüldü. Sütunun, kabul edeceği sınırlı bir karakter kümesine sahip olduğu ortaya çıktı, değiştirdi ve şimdi sorgu düzgün çalışıyor.


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

Çalışamadı. İstek sözdizimi doğruydu ancak yürütüldüğünde "0 satır etkilendi".

Çözüm şuydu:

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

O işe yaradı.


2

Bunu yapabilirsiniz:

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

field null olduğunda field = field + değeri çalışmaz.


Gerçekten mysql dizeleri ile + kullanabilirsiniz?
Sudhir N
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.