SQL UPDATE tutti i valori in un campo con stringa CONCAT aggiunta non funzionante


159

Ecco cosa voglio fare:

tabella attuale:

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

Mystery Query (qualcosa del genere "UPDATE table SET data = CONCAT(data, 'a')")

tabella risultante:

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

questo è tutto! Devo solo farlo in una singola query, ma non riesco a trovare un modo. Sto usando mySQL su bluehost (penso che sia la sua versione 4.1)

Grazie a tutti.


5
Hai davvero provato la tua domanda? Dovrebbe "funzionare"
Phil,

Sì, l'ho provato. Ho pensato che dovrebbe funzionare anche troppo.
Fresheyeball

ecco il mio ritorno 'vita reale': [SQL] AGGIORNAMENTO domande_national SET cat_id = CONCAT (cat_id, 'a') Righe interessate: 0 Tempo: 0.069ms
Fresheyeball

È cat_idun campo di caratteri (varchar, testo, ecc) o numerico?
Phil

non funzionava per me (SQL 2012) quindi ho provato "update t set data = data + 'a'" funziona bene ..
Silver

Risposte:


258

È praticamente tutto ciò di cui hai bisogno:

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)

Non sono sicuro del motivo per cui potresti avere problemi, anche se sto testando questo su 5.1.41


1
La concatfunzione in 4.1 sembra la stessa - dev.mysql.com/doc/refman/4.1/en/…
Phil

12
Risolto Si scopre che la colonna aveva un set limitato di caratteri che avrebbe accettato, lo ha cambiato e ora la query funziona bene.
Fresheyeball

Ho un po 'lo stesso senario, tranne che voglio sostituire tutte le doppie virgolette con virgolette singole. Qualche suggerimento come posso farlo?
Shaonline,

Questa è stata una buona risposta, ma un po 'confusa, poiché sul mio server "dati" era una parola chiave. Forse un esempio meno ambiguo sarebbe:UPDATE table SET column_name=concat(column_name, 'string');
Kiky Rodriguez,

38

CONCAT con un valore null restituisce null, quindi la soluzione più semplice è:

UPDATE myTable SET spares = IFNULL (CONCAT (ricambi, "stringa"), "stringa")


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

non funziona per me.

ricambi è NULLdi default ma èvarchar


5
sembra che se il valore è NULL di default non funziona. deve essere una stringa vuota
DS_web_developer il

9

converti i NULLvalori con una stringa vuota avvolgendolaCOALESCE

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

O

Utilizzare invece CONCAT_WS :

"UPDATE table SET data = CONCAT_WS(',',data, 'a')"

8

Risolto Si scopre che la colonna aveva un set limitato di caratteri che avrebbe accettato, lo ha cambiato e ora la query funziona bene.


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

Impossibile risolverlo. La sintassi della richiesta era corretta, ma "riga 0 interessata" quando eseguita.

La soluzione era:

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

Quello ha funzionato.


2

Puoi farlo:

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

field = field + value non funziona quando field è null.


Puoi davvero usare + con le stringhe in mysql?
Sudhir N,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.