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

159

Oto, co chcę zrobić:

aktualna tabela:

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

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

wynikowa tabela:

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

Otóż ​​to! Muszę to zrobić w jednym zapytaniu, ale nie mogę znaleźć sposobu. Używam MySQL na bluehost (myślę, że jego wersja 4.1)

Dziękuję wszystkim.

Fresheyeball
źródło
5
Czy faktycznie wypróbowałeś swoje zapytanie? Powinno „po prostu działać”
Phil
Tak, próbowałem. Pomyślałem, że to też powinno działać.
Fresheyeball
oto mój zwrot „z prawdziwego życia”: [SQL] UPDATE questions_national SET cat_id = CONCAT (cat_id, „a”) Wiersze, których to dotyczy: 0 Czas: 0,069 ms
Fresheyeball
Czy jest cat_idto pole znakowe (varchar, tekst itp.) Czy numeryczne?
Phil
nie działa dla mnie (SQL 2012), więc próbowałem "update t set data = data + 'a'" działa dobrze ..
Silver

Odpowiedzi:

257

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 miałbyś problemy, chociaż testuję to w wersji 5.1.41

Marc B.
źródło
1
concatFunkcja w 4.1 wygląda tak samo - dev.mysql.com/doc/refman/4.1/en/...
Phil
12
Rozwiązałem to. Okazuje się, że kolumna miała ograniczony zestaw znaków, które mogła zaakceptować, zmieniła go, a teraz zapytanie działa dobrze.
Fresheyeball
Mam trochę tego samego senario, z wyjątkiem tego, że chcę zastąpić wszystkie podwójne cudzysłowy pojedynczymi cudzysłowami. Jakieś sugestie, jak mogę to zrobić?
Shaonline,
To była dobra odpowiedź, ale trochę myląca, ponieważ na moim serwerze słowo „dane” było słowem kluczowym. Być może mniej niejednoznacznym przykładem byłoby:UPDATE table SET column_name=concat(column_name, 'string');
Kiky Rodriguez,
38

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

UPDATE myTable SET zapasowe = IFNULL (CONCAT (zapasowe, "ciąg"), "ciąg")

andrejc
źródło
11
UPDATE mytable SET spares = CONCAT(spares, ',', '818') WHERE id = 1

nie działa dla mnie.

części zamienne są NULLdomyślnie, ale jegovarchar

DS_web_developer
źródło
5
wydaje się, że jeśli wartość jest domyślnie NULL, to nie działa. musi to być pusty ciąg
DS_web_developer
9

przekonwertuj NULLwartości z pustym ciągiem, zawijając goCOALESCE

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

LUB

Zamiast tego użyj CONCAT_WS :

"UPDATE table SET data = CONCAT_WS(',',data, 'a')"
Rohan Khude
źródło
8

Rozwiązałem to. Okazuje się, że kolumna miała ograniczony zestaw znaków, które mogła zaakceptować, zmieniła go, a teraz zapytanie działa dobrze.

Fresheyeball
źródło
8
UPDATE 
    myTable
SET 
    col = CONCAT( col , "string" )

Nie mogłem tego rozwiązać. Składnia żądania była poprawna, ale po wykonaniu wystąpił błąd „0 linii”.

Rozwiązaniem było:

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

Ten zadziałał.

Jeremy Thille
źródło
2

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 ma wartość null.

Eric
źródło
Czy naprawdę możesz używać + ze stringami w mysql?
Sudhir N