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.


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


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


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


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

8

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


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.


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.


Você pode realmente usar + com strings no mysql?
Sudhir N
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.