2010-11-08 13 views
112

Voici ce que je veux faire:UPDATE SQL toutes les valeurs dans un champ avec CONCAT chaîne ajoutée ne fonctionne pas

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')")

résultant table:

+----+-------------+ 
| 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 à tous.

+4

Avez-vous déjà essayé votre requête? Il devrait "juste travailler" – Phil

+0

Oui, je l'ai essayé. Je pensais que ça devrait marcher aussi. – Fresheyeball

+0

ici est mon retour 'la vraie vie': [SQL] Mise à jour questions_national SET cat_id = CONCAT (cat_id, 'a') lignes affectées: 0 Heure: 0.069ms – Fresheyeball

Répondre

182

C'est à peu près tout ce qu'il faut:

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 auriez des problèmes, bien que je teste cela sur 5.1.41

+0

même ici, la version 5.1.44 – rsenna

+1

La fonction' concat' dans 4.1 ressemble à la même - http: //dev.mysql.com/doc/refman/4.1/en/string-functions.html#function_concat – Phil

+9

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

6

a résolu le problème. Il s'avère que la colonne avait un ensemble limité de caractères qu'elle accepterait, l'a changé, et maintenant la requête fonctionne bien.

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

Impossible de résoudre ce 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") 

Que l'on a travaillé.

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

ne fonctionne pas pour moi.

pièces de rechange est NULL par défaut, mais son varchar

+5

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

1

Vous pouvez 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 

champ = champ + valeur ne fonctionne pas lorsque le champ est nul.

+0

Pouvez-vous vraiment utiliser + avec des chaînes dans mysql? –

27

CONCAT avec une valeur nulle renvoie nulle, de sorte que la solution la plus simple est la suivante:

UPDATE myTable SET pièces de rechange = IFNULL (concat (pièces de rechange, "string" "string"),)

+0

Merci! C'est un travail pour moi. –

4

convertir les valeurs NULL avec une chaîne vide en l'enveloppant dans COALESCE

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

OU

Utilisation CONCAT_WS à la place:

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

Cela a fonctionné pour moi, merci –