2010-11-08 4 views
112

Esto es lo que quiero hacer:SQL ACTUALIZACIÓN todos los valores en un campo con anexa CONCAT cadena no trabaja

tabla actual:

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

de consulta Mystery (algo así como "UPDATE table SET data = CONCAT(data, 'a')")

resultante tabla:

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

eso es todo! Solo necesito hacerlo en una sola consulta, pero parece que no puedo encontrar la manera. Estoy utilizando mySQL en bluehost (creo que es la versión 4.1)

Gracias a todos.

+4

¿Usted ha intentado realmente su pregunta? Debería "funcionar" – Phil

+0

Sí, lo he probado. Pensé que debería funcionar también. – Fresheyeball

+0

aquí es mi vuelta 'vida real': [SQL] ACTUALIZACIÓN questions_national SET cat_id = concat (cat_id, 'a') filas afectadas: 0 Tiempo: 0.069ms – Fresheyeball

Respuesta

182

eso es prácticamente todo lo que necesita:

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) 

No sé por qué usted estaría teniendo problemas, a pesar de que estoy probando esto en 5.1.41

+0

mismo aquí, la versión 5.1.44 – rsenna

+1

La función 'concat' en 4.1 tiene el mismo aspecto - http: //dev.mysql.com/doc/refman/4.1/en/string-functions.html#function_concat – Phil

+9

resuelto. Resulta que la columna tenía un conjunto limitado de caracteres que aceptaría, la cambió y ahora la consulta funciona bien. – Fresheyeball

6

resuelto. Resulta que la columna tenía un conjunto limitado de caracteres que aceptaría, la cambió y ahora la consulta funciona bien.

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

No se pudo resolver. La sintaxis de solicitud fue correcta, pero "0 línea afectada" cuando se ejecutó.

La solución fue:

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

que se trabajó.

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

no funciona para mí.

repuestos es NULL por defecto, pero su varchar

+5

parece, que si el valor es nulo por defecto no trabaja. tiene que ser una cadena vacía –

1

Usted puede hacer esto:

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 + valor no funciona cuando el campo es nulo.

+0

Se puede realmente usar + con cadenas en MySQL? –

27

CONCAT con un valor nulo devuelve null, por lo que la solución más fácil es:

ACTUALIZACIÓN myTable SET recambios = IFNULL (concat (repuestos, "string"), "string")

+0

¡Gracias! Es trabajo para mi –

4

convertir los valores con NULL cadena vacía envolviéndolo en COALESCE

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

O

Uso CONCAT_WS lugar:

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

Esto funcionó para mí, gracias –

Cuestiones relacionadas