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.