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.

Fresheyeball
la source
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

Marc B
la source
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")

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

ne fonctionne pas pour moi.

spares est NULLpar défaut mais sonvarchar

DS_web_developer
la source
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')"
Rohan Khude
la source
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.

Fresheyeball
la source
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é.

Jeremy Thille
la source
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.

Eric
la source
Pouvez-vous vraiment utiliser + avec des chaînes dans mysql?
Sudhir N