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.