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.