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.


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


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


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

nie działa dla mnie.

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


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

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.


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ł.


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.


Czy naprawdę możesz używać + ze stringami w mysql?
Sudhir N
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.