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.


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


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")


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

no funciona para mi

repuestos es NULLpor defecto pero suvarchar


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')"

8

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


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ó.


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.


¿Realmente puedes usar + con cadenas en mysql?
— Sudhir N
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.