SQL UPDATE toutes les valeurs dans un champ avec la chaîne ajoutée CONCAT ne fonctionne pas


159

Voici ce que je veux faire:

table actuelle:

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

Requête mystère (quelque chose comme "UPDATE table SET data = CONCAT(data, 'a')")

tableau résultant:

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

c'est tout! J'ai juste besoin de le faire en une seule requête, mais je n'arrive pas à trouver un moyen. J'utilise mySQL sur bluehost (je pense que sa version 4.1)

Merci tout le monde.


5
Avez-vous réellement essayé votre requête? Cela devrait "juste fonctionner"
Phil

Oui je l'ai essayé. J'ai pensé que ça devrait marcher aussi.
Fresheyeball

voici mon retour dans la «vraie vie»: [SQL] UPDATE questions_national SET cat_id = CONCAT (cat_id, 'a') Lignes affectées: 0 Durée: 0,069 ms
Fresheyeball

Un cat_idchamp de caractères (varchar, texte, etc.) ou numérique?
Phil

ne fonctionnait pas pour moi (SQL 2012) alors j'ai essayé "update t set data = data + 'a'" fonctionne bien ..
Argent

Réponses:


258

C'est à peu près tout ce dont vous avez besoin:

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)

Je ne sais pas pourquoi vous rencontrez des problèmes, bien que je teste cela sur 5.1.41


1
La concatfonction de la version 4.1 a la même apparence
Phil

12
Résolu. Il s'avère que la colonne avait un ensemble limité de caractères qu'elle accepterait, la changeait et maintenant la requête fonctionne correctement.
Fresheyeball

J'ai un peu le même senario, sauf que je veux remplacer tous les guillemets doubles par des guillemets simples. Des suggestions comment puis-je faire cela?
Shaonline

C'était une bonne réponse, mais un peu déroutante, car sur mon serveur, «données» était un mot-clé. Peut-être qu'un exemple moins ambigu serait:UPDATE table SET column_name=concat(column_name, 'string');
Kiky Rodriguez

38

CONCAT avec une valeur nulle renvoie null, donc la solution la plus simple est:

UPDATE maTable SET spares = IFNULL (CONCAT (spares, "string"), "string")


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

ne fonctionne pas pour moi.

spares est NULLpar défaut mais sonvarchar


5
il semble que si la valeur est NULL par défaut, cela ne fonctionne pas. il doit s'agir d'une chaîne vide
DS_web_developer

9

convertir les NULLvaleurs avec une chaîne vide en l'enveloppant dansCOALESCE

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

OU

Utilisez plutôt CONCAT_WS :

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

8

Résolu. Il s'avère que la colonne avait un ensemble limité de caractères qu'elle accepterait, l'a modifiée et maintenant la requête fonctionne correctement.


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

Impossible de résoudre le problème. La syntaxe de la requête était correcte, mais "0 ligne affectée" lors de l'exécution.

La solution était:

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

Celui-là a fonctionné.


2

Tu peux le faire:

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 ne fonctionne pas lorsque le champ est nul.


Pouvez-vous vraiment utiliser + avec des chaînes dans mysql?
Sudhir N
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.