SQL UPDATE todos os valores em um campo com a sequência anexada CONCAT não está funcionando

159

Aqui está o que eu quero fazer:

tabela atual:

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

Consulta de mistério (algo como "UPDATE table SET data = CONCAT(data, 'a')")

tabela resultante:

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

é isso aí! Eu só preciso fazer isso em uma única consulta, mas não consigo encontrar uma maneira. Estou usando o mySQL no bluehost (acho que sua versão 4.1)

Obrigado a todos.

Fresheyeball
fonte
5
Você já tentou sua consulta? Deveria "apenas funcionar"
Phil
Sim, eu tentei. Eu pensei que deveria funcionar também.
Fresheyeball
aqui está o meu retorno da 'vida real': [SQL] UPDATE questions_national SET cat_id = CONCAT (cat_id, 'a') Linhas afetadas: 0 Tempo: 0.069ms
Fresheyeball
É cat_idum campo de caractere (varchar, texto, etc) ou numérica?
Phil
não estava funcionando para mim (SQL 2012), então tentei "atualizar dados de conjunto de dados = dados + 'a'" funciona bem ..
Silver

Respostas:

257

Isso é tudo o que você precisa:

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)

Não sei por que você estaria tendo problemas, embora eu esteja testando isso no 5.1.41

Marc B
fonte
1
A concatfunção no 4.1 parece a mesma - dev.mysql.com/doc/refman/4.1/en/…
Phil
12
Resolvi-o. Acontece que a coluna tinha um conjunto limitado de caracteres que aceitaria, alterou e agora a consulta funciona bem.
Fresheyeball
Eu tenho um pouco o mesmo senario, exceto que eu quero substituir todas as aspas duplas por aspas simples. Alguma sugestão como posso fazer isso?
Shaonline
Essa foi uma boa resposta, mas um pouco confusa, pois no meu servidor 'dados' era uma palavra-chave. Talvez um exemplo menos ambíguo seja:UPDATE table SET column_name=concat(column_name, 'string');
Kiky Rodriguez
38

CONCAT com um valor nulo retorna nulo; portanto, a solução mais fácil é:

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

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

não está trabalhando para mim.

peças de reposição é NULLpor padrão, mas a suavarchar

DS_web_developer
fonte
5
parece que, se o valor for NULL por padrão, ele não funcionará. ele tem que ser uma string vazia
DS_web_developer
9

converta os NULLvalores com uma cadeia vazia envolvendo-aCOALESCE

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

OU

Use CONCAT_WS :

"UPDATE table SET data = CONCAT_WS(',',data, 'a')"
Rohan Khude
fonte
8

Resolvi-o. Acontece que a coluna tinha um conjunto limitado de caracteres que aceitaria, alterou e agora a consulta funciona bem.

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

Não foi possível resolver isso. A sintaxe da solicitação estava correta, mas "0 linha afetada" quando executada.

A solução foi:

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

Aquele funcionou.

Jeremy Thille
fonte
2

Você consegue fazer isso:

Update myTable
SET spares = (SELECT CASE WHEN spares IS NULL THEN '' ELSE spares END AS spares WHERE id = 1) + 'some text'
WHERE id = 1

campo = campo + valor não funciona quando o campo é nulo.

Eric
fonte
Você pode realmente usar + com strings no mysql?
Sudhir N