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.


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


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


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

Ich arbeite nicht für mich.

Ersatzteile sind NULLstandardmäßig aber seinevarchar


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

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.


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.


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.


Können Sie + wirklich mit Strings in MySQL verwenden?
Sudhir N
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.