ACTUALIZACIÓN de SQL todos los valores en un campo con cadena adjunta CONCAT no funciona

159

Esto es lo que quiero hacer:

tabla actual:

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

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

tabla resultante:

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

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

Gracias a todos.

Fresheyeball
fuente
55
¿Realmente has intentado tu consulta? Debería "funcionar"
Phil
Sí, lo he intentado Pensé que debería funcionar también.
Fresheyeball
aquí está mi retorno de la "vida real": [SQL] ACTUALIZAR preguntas_conjunto nacional cat_id = CONCAT (cat_id, 'a') Filas afectadas: 0 Tiempo: 0.069ms
Fresheyeball
¿Es cat_idun campo de caracteres (varchar, texto, etc.) o numérico?
Phil
no funcionaba para mí (SQL 2012), así que intenté "actualizar t set data = data + 'a'" funciona bien ..
Silver

Respuestas:

258

Eso es casi todo lo que necesitas:

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 estoy seguro de por qué tendría problemas, aunque estoy probando esto en 5.1.41

Marc B
fuente
1
La concatfunción en 4.1 se ve igual - dev.mysql.com/doc/refman/4.1/en/…
Phil
12
Resuelto. Resulta que la columna tenía un conjunto limitado de caracteres que aceptaría, la cambió y ahora la consulta funciona bien.
Fresheyeball el
Tengo un poco el mismo senario, excepto que quiero reemplazar todas las comillas dobles con comillas simples. ¿Alguna sugerencia, cómo puedo hacer eso?
Shaonline
Esta fue una buena respuesta, pero un poco confusa, ya que en mi servidor 'datos' era una palabra clave. Quizás un ejemplo menos ambiguo sería:UPDATE table SET column_name=concat(column_name, 'string');
Kiky Rodriguez
38

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

ACTUALIZAR myTable SET repuestos = IFNULL (CONCAT (repuestos, "cadena"), "cadena")

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

no funciona para mi

repuestos es NULLpor defecto pero suvarchar

DS_web_developer
fuente
55
parece que si el valor es NULL por defecto, no funciona. tiene que ser una cadena vacía
DS_web_developer
9

convertir los NULLvalores con una cadena vacía envolviéndola enCOALESCE

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

O

Use CONCAT_WS en su lugar:

"UPDATE table SET data = CONCAT_WS(',',data, 'a')"
Rohan Khude
fuente
8

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

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

No se pudo resolver. La sintaxis de la solicitud era correcta, pero "Línea 0 afectada" cuando se ejecuta.

La solución fue:

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

Ese funcionó.

Jeremy Thille
fuente
2

Puedes hacerlo:

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 no funciona cuando field es nulo.

Eric
fuente
¿Realmente puedes usar + con cadenas en mysql?
Sudhir N