SQL aktualizuje wszystkie wartości w polu z dołączonym ciągiem znaków CONCAT nie działa

Oto co chcę zrobić:

Tabela bieżąca:

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

Tajemnicze zapytanie (coś w rodzaju "UPDATE table SET data = CONCAT(data, 'a')")

Tabela wynikowa:

+----+-------------+  
| id | data        |  
+----+-------------+  
|  1 | maxa        |  
|  2 | lindaa      |  
|  3 | sama        |  
|  4 | henrya      |  
+----+-------------+  
To wszystko! Muszę to zrobić jednym zapytaniem, ale nie mogę znaleźć sposobu. Używam mySQL na bluehost (myślę, że jego wersja 4.1) Dziękuję wszystkim.
Author: Hugo Pakula, 2010-11-09

7 answers

To prawie wszystko, czego potrzebujesz:

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)

Nie wiem dlaczego mielibyście problemy, chociaż testuję to na 5.1.41

 206
Author: Marc B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-08 21:46:14

CONCAT z wartością null zwraca null, więc najprostszym rozwiązaniem jest:

UPDATE myTable SET spares = IFNULL (CONCAT (spares, "string"),"string")

 28
Author: andrejc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-14 11:38:10
UPDATE mytable SET spares = CONCAT(spares, ',', '818') WHERE id = 1
Nie działa dla mnie.

Spares jest NULL domyślnie, ale jego varchar

 9
Author: DS_web_developer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-29 08:41:57

Rozwiązałem. Okazuje się, że kolumna miała ograniczony zestaw znaków, które zaakceptowałaby, zmieniła i teraz Zapytanie działa dobrze.

 6
Author: Fresheyeball,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-09 03:20:09

Konwertuj wartości NULL z pustym łańcuchem, owijając je w COALESCE

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

Lub

Użyj CONCAT_WS zamiast:

"UPDATE table SET data = CONCAT_WS(',',data, 'a')"
 5
Author: Rohan Khude,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-04 10:02:13
UPDATE 
    myTable
SET 
    col = CONCAT( col , "string" )
Nie udało się. Składnia żądania była poprawna, ale "linia 0 miała wpływ" podczas wykonywania.

Rozwiązaniem było:

UPDATE 
    myTable 
SET 
    col = CONCAT( myTable.col , "string" )
To zadziałało.
 3
Author: Jeremy Thille,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-21 16:49:49

Możesz to zrobić:

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

Pole = pole + Wartość nie działa, gdy pole jest null.

 1
Author: Eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-24 18:19:23