2010-11-08 11 views
112

Ecco cosa voglio fare:SQL UPDATE tutti i valori in un campo con allegata CONCAT stringa non funziona

tabella corrente:

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

Mistero Query (qualcosa come "UPDATE table SET data = CONCAT(data, 'a')")

risultante tabella:

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

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

Grazie a tutti.

+4

Avete effettivamente provato la query? Dovrebbe "funzionare" – Phil

+0

Sì, l'ho provato. Pensavo che avrebbe dovuto funzionare anche solo – Fresheyeball

+0

qui è la mia 'vita reale' di ritorno: [SQL] UPDATE questions_national SET cat_id = CONCAT (cat_id, 'a') righe interessate: 0 Tempo: 0.069ms – Fresheyeball

risposta

182

che è praticamente tutto ciò che serve:

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 certo perché si sarebbe hanno problemi, se sto testando questo su 5.1.41

+0

stesso qui, versione 5.1.44 – rsenna

+1

La funzione 'concat' in 4.1 sembra la stessa - http: //dev.mysql.com/doc/refman/4.1/en/string-functions.html#function_concat – Phil

+9

Risolto. Risulta che la colonna aveva un numero limitato di caratteri che avrebbe accettato, modificato e ora la query funziona correttamente. – Fresheyeball

6

Risolto esso. Risulta che la colonna aveva un numero limitato di caratteri che avrebbe accettato, modificato e ora la query funziona correttamente.

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

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

La soluzione era:

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

Quello ha funzionato.

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

non funziona per me.

ricambi è NULL di default, ma il suo varchar

+5

sembra che, se il valore è NULL per impostazione predefinita, non funziona. deve essere una stringa vuota –

1

Si può fare questo:

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

campo = Campo + valore non funziona quando il campo è nullo.

+0

Puoi davvero usare + con le stringhe in mysql? –

27

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

UPDATE myTable SET risparmia = IFNULL (concat (parti di ricambio, "stringa"), "string")

+0

Grazie! È lavoro per me. –

4

convertire i valori NULL con stringa vuota avvolgendolo in COALESCE

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

O

Uso CONCAT_WS invece:

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

Questo ha funzionato per me, grazie –

Problemi correlati