SQL UPDATE alle Werte in einem Feld mit angehängter Zeichenfolge CONCAT funktionieren nicht

159

Folgendes möchte ich tun:

aktuelle Tabelle:

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

Mystery Query (so etwas wie "UPDATE table SET data = CONCAT(data, 'a')")

resultierende Tabelle:

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

das ist es! Ich muss es nur in einer einzigen Abfrage tun, kann aber keinen Weg finden. Ich benutze mySQL auf Bluehost (ich denke, es ist Version 4.1)

Vielen Dank an alle.

Fresheyeball
quelle
5
Haben Sie Ihre Anfrage tatsächlich ausprobiert? Es sollte "einfach funktionieren"
Phil
Ja, ich habe es versucht. Ich dachte, es sollte einfach auch funktionieren.
Fresheyeball
Hier ist meine Rückkehr aus dem wirklichen Leben: [SQL] UPDATE question_national SET cat_id = CONCAT (cat_id, 'a') Betroffene Zeilen: 0 Zeit: 0,069 ms
Fresheyeball
Ist cat_idein Zeichenfeld (Varchar, Text usw.) oder numerisch?
Phil
funktionierte nicht für mich (SQL 2012), also habe ich versucht "update t set data = data + 'a'" funktioniert gut ..
Silver

Antworten:

257

Das ist so ziemlich alles was Sie brauchen:

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)

Ich bin mir nicht sicher, warum Sie Probleme haben würden, obwohl ich dies am 5.1.41 teste

Marc B.
quelle
1
Die concatFunktion in 4.1 sieht gleich aus - dev.mysql.com/doc/refman/4.1/en/…
Phil
12
Ich habe es gelöst. Es stellte sich heraus, dass die Spalte einen begrenzten Satz von Zeichen hatte, die sie akzeptieren würde, sie änderte und jetzt funktioniert die Abfrage einwandfrei.
Fresheyeball
Ich habe etwas das gleiche Szenario, außer dass ich alle doppelten Anführungszeichen durch einfache Anführungszeichen ersetzen möchte. Irgendwelche Vorschläge, wie kann ich das machen?
Shaonline
Dies war eine gute Antwort, aber etwas verwirrend, da auf meinem Server 'Daten' ein Schlüsselwort waren. Vielleicht wäre ein weniger zweideutiges Beispiel:UPDATE table SET column_name=concat(column_name, 'string');
Kiky Rodriguez
38

CONCAT mit einem Nullwert gibt null zurück. Die einfachste Lösung ist also:

UPDATE myTable SET Ersatzteile = IFNULL (CONCAT (Ersatzteile, "Zeichenfolge"), "Zeichenfolge")

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

Ich arbeite nicht für mich.

Ersatzteile sind NULLstandardmäßig aber seinevarchar

DS_web_developer
quelle
5
Es scheint, dass wenn der Wert standardmäßig NULL ist, es nicht funktioniert. Es muss eine leere Zeichenfolge sein
DS_web_developer
9

Konvertieren Sie die NULLWerte mit einer leeren Zeichenfolge, indem Sie sie einschließenCOALESCE

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

ODER

Verwenden Sie stattdessen CONCAT_WS :

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

Ich habe es gelöst. Es stellte sich heraus, dass die Spalte einen begrenzten Satz von Zeichen hatte, die sie akzeptieren würde, sie änderte und jetzt funktioniert die Abfrage einwandfrei.

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

Konnte es nicht herausfinden. Die Anforderungssyntax war korrekt, aber "0 Zeile betroffen" bei der Ausführung.

Die Lösung war:

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

Das hat funktioniert.

Jeremy Thille
quelle
2

Du kannst das:

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

Feld = Feld + Wert funktioniert nicht, wenn Feld Null ist.

Eric
quelle
Können Sie + wirklich mit Strings in MySQL verwenden?
Sudhir N