SQL CẬP NHẬT tất cả các giá trị trong một trường có chuỗi CONCAT được nối thêm không hoạt động


159

Đây là những gì tôi muốn làm:

bảng hiện tại:

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

Truy vấn bí ẩn (đại loại như "UPDATE table SET data = CONCAT(data, 'a')")

bảng kết quả:

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

đó là nó! Tôi chỉ cần thực hiện nó trong một truy vấn duy nhất, nhưng dường như không thể tìm ra cách nào. Tôi đang sử dụng myQuery trên bluehost (tôi nghĩ phiên bản 4.1)

Cảm ơn mọi người.


5
Bạn đã thực sự thử truy vấn của bạn? Nó nên "chỉ hoạt động"
Phil

Có tôi đã thử nó. Tôi nghĩ rằng nó chỉ nên làm việc quá.
Fresheyeball

đây là sự trở lại 'cuộc sống thực' của tôi: [SQL] CẬP NHẬT câu hỏi đặt tên cat_id = CONCAT (cat_id, 'a') Các hàng bị ảnh hưởng: 0 Thời gian: 0,069ms
Fresheyeball

cat_idmột trường ký tự (varchar, văn bản, vv) hoặc số?
Phil

không hoạt động với tôi (SQL 2012) vì vậy tôi đã thử "update t set data = data + 'a'" hoạt động tốt ..
Silver

Câu trả lời:


257

Đó là khá nhiều tất cả những gì bạn cần:

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)

Không chắc chắn tại sao bạn gặp sự cố, mặc dù tôi đang thử nghiệm điều này trên 5.1.41


1
Các concatchức năng trong 4.1 trông giống nhau - dev.mysql.com/doc/refman/4.1/en/...
Phil

12
Giải quyết nó. Hóa ra cột có một bộ ký tự giới hạn mà nó sẽ chấp nhận, thay đổi nó và bây giờ truy vấn hoạt động tốt.
Fresheyeball

Tôi có một chút senario, ngoại trừ tôi muốn thay thế tất cả các dấu ngoặc kép bằng dấu ngoặc đơn. Bất kỳ đề nghị làm thế nào tôi có thể làm điều đó?
Shaonline

Đây là một câu trả lời hay, nhưng hơi khó hiểu, vì trên máy chủ của tôi, 'dữ liệu' là một từ khóa. Có lẽ một ví dụ ít mơ hồ hơn sẽ là:UPDATE table SET column_name=concat(column_name, 'string');
Kiky Rodriguez

38

CONCAT với giá trị null trả về null, vì vậy giải pháp đơn giản nhất là:

CẬP NHẬT myTable SET spares = IFNULL (CONCAT (phụ tùng, "chuỗi"), "chuỗi")


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

không làm việc cho tôi

phụ tùng NULLtheo mặc định nhưng nóvarchar


5
Dường như, nếu giá trị là NULL theo mặc định thì nó không hoạt động. nó phải là một chuỗi rỗng
DS_web_developer

9

chuyển đổi các NULLgiá trị với chuỗi rỗng bằng cách gói nó vàoCOALESCE

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

HOẶC LÀ

Sử dụng CONCAT_WS thay thế:

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

8

Giải quyết nó. Hóa ra cột có một bộ ký tự giới hạn mà nó sẽ chấp nhận, thay đổi nó và bây giờ truy vấn hoạt động tốt.


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

Không thể làm việc đó ra. Cú pháp yêu cầu đã đúng, nhưng "0 dòng bị ảnh hưởng" khi được thực thi.

Giải pháp là:

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

Đó là một trong những làm việc.


2

Bạn có thể làm được việc này:

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

trường = trường + giá trị không hoạt động khi trường là null.


Bạn có thể thực sự sử dụng + với các chuỗi trong mysql không?
Sudhir N
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.