193 votes

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

Voici ce que je veux faire :

tableau actuel :

+----+-------------+  
| 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 ça ! 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 c'est la version 4.1).

Merci à tous.

5 votes

Avez-vous vraiment essayé votre requête ? Ça devrait "marcher".

0 votes

Oui, j'ai essayé. Je pensais que ça devait marcher aussi.

0 votes

Voici le résultat de ma recherche dans la vie réelle : [SQL] UPDATE questions_national SET cat_id = CONCAT(cat_id,'a') Rangées affectées : 0 Temps : 0.069ms

314voto

Marc B Points 195501

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 difficultés, mais je teste ceci sur la 5.1.41.

1 votes

El concat dans 4.1 a la même apparence - dev.mysql.com/doc/refman/4.1/fr/

14 votes

Résolu. Il s'est avéré que la colonne avait un ensemble limité de caractères qu'elle acceptait, je l'ai changé, et maintenant la requête fonctionne bien.

0 votes

J'ai un peu le même scénario, sauf que je veux remplacer tous les guillemets doubles par des guillemets simples. Avez-vous une idée de la façon dont je peux le faire ?

43voto

andrejc Points 61

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

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

0 votes

Une solution parfaite.

15voto

Elgringorrible Points 64
UPDATE 
    myTable
SET 
    col = CONCAT( col , "string" )

Je n'ai pas réussi à résoudre le problème. La syntaxe de la demande était correcte, mais "0 ligne affectée" lors de l'exécution.

La solution a été :

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

Celui-là a marché.

12voto

DS_web_developer Points 836
UPDATE mytable SET spares = CONCAT(spares, ',', '818') WHERE id = 1

ne fonctionne pas pour moi.

les pièces détachées sont NULL par défaut mais son varchar

5 votes

Il semble que si la valeur est NULL par défaut, cela ne fonctionne pas. Ce doit être une chaîne vide.

0 votes

UPDATE mytable SET spares = CONCAT(COALESCE(spares, ''), ',', '818') WHERE id = 1 Cela fonctionnera. Il utilise une chaîne vide '' lorsqu'il rencontre des valeurs nulles.

8voto

Fresheyeball Points 11655

Je l'ai résolu. Il s'est avéré que la colonne avait un ensemble limité de caractères qu'elle acceptait, je l'ai changé, et maintenant la requête fonctionne bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X