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.