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

Mı 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.