ОНОВЛЕННЯ SQL усіх значень у полі із доданим рядком CONCAT не працює


159

Ось що я хочу зробити:

поточна таблиця:

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

Таємничий запит (щось на кшталт "UPDATE table SET data = CONCAT(data, 'a')")

Отримана таблиця:

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

Це воно! Мені просто потрібно зробити це в одному запиті, але, схоже, не знайти способу. Я використовую mySQL на bluehost (я думаю, його версія 4.1)

Дякую всім.


5
Ви справді спробували свій запит? Це повинно "просто працювати"
Філ

Так, я спробував це. Я думав, що це теж має працювати.
Fresheyeball

ось моє "реальне життя" повернення: [SQL] ОНОВЛЕННЯ питань_національного SET cat_id = CONCAT (cat_id, 'a') Постраждалі рядки: 0 Час: 0.069ms
Fresheyeball

Чи cat_idполе символів (варшар, текст тощо) чи числове?
Філ

не працював для мене (SQL 2012), тому я спробував "оновити t set data = data + 'a" "працює чудово ..
Срібло

Відповіді:


257

Це майже все, що вам потрібно:

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)

Не знаю, з чим у вас виникнуть проблеми, хоча я тестую це на 5.1.41


1
concatФункція 4.1 виглядає так само - dev.mysql.com/doc/refman/4.1/en / ...
Філ

12
Вирішили це. Виявляється, стовпець мав обмежений набір символів, який він би прийняв, змінив, і тепер запит працює нормально.
Fresheyeball

У мене є такий самий сенаріо, за винятком того, що я хочу замінити всі подвійні лапки на одиничні лапки. Будь-які пропозиції, як я можу це зробити?
Шаонлайн

Це було гарною відповіддю, але трохи заплутано, оскільки на моєму сервері "дані" було ключовим словом. Можливо, менш неоднозначним прикладом може бути:UPDATE table SET column_name=concat(column_name, 'string');
Кікі Родрігес

38

CONCAT з нульовим значенням повертає null, тому найпростішим рішенням є:

ОНОВЛЕННЯ myTable SET spares = IFNULL (CONCAT (запасні частини, "string"), "string")


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

не працює для мене.

Запчастини NULLза замовчуванням, але цеvarchar


5
видається, що якщо значення за замовчуванням NULL, воно не працює. це повинен бути порожній рядок
DS_web_developer

9

конвертувати NULLзначення в порожній рядок, загорнувши йогоCOALESCE

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

АБО

Замість цього використовуйте CONCAT_WS :

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

8

Вирішили це. Виявляється, стовпець мав обмежений набір символів, який він би прийняв, змінив, і тепер запит працює нормально.


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

Не вдалося це зробити. Синтаксис запиту був правильним, але при виконанні "0 рядків вплинуто".

Рішення було:

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

Той працював.


2

Ви можете зробити це:

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

field = поле + значення не працює, коли поле є нульовим.


Чи дійсно ви можете використовувати + з рядками в mysql?
Sudhir N
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.