SQL UPDATE ค่าทั้งหมดในฟิลด์ที่มีสตริงต่อท้าย 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] UPDATE Questions_national SET cat_id = CONCAT (cat_id, 'a') แถวที่ได้รับผลกระทบ: 0 เวลา: 0.069ms
Fresheyeball

เป็นcat_idตัวละครที่ฟิลด์ (varchar, ข้อความ, ฯลฯ ) หรือตัวเลข?
ฟิล

ไม่ทำงานสำหรับฉัน (SQL 2012) ดังนั้นฉันจึงลอง "อัปเดตชุดข้อมูล = ข้อมูล + '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

ฉันมี senario เดียวกันค่อนข้างยกเว้นฉันต้องการแทนที่อัญประกาศคู่ทั้งหมดด้วยอัญประกาศเดี่ยว ข้อเสนอแนะใด ๆ ที่ฉันจะทำอย่างไร
Shaonline

นี่เป็นคำตอบที่ดี แต่สับสนเล็กน้อยเนื่องจาก 'data' ในเซิร์ฟเวอร์ของฉันเป็นคำหลัก อาจเป็นตัวอย่างที่ไม่ชัดเจนน้อยกว่า:UPDATE table SET column_name=concat(column_name, 'string');
Kiky Rodriguez

38

CONCAT ที่มีค่า NULL ส่งคืนค่า Null ดังนั้นวิธีที่ง่ายที่สุดคือ:

อัพเดท myTable SET spares = IFNULL (CONCAT (spares, "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 = field + value ไม่ทำงานเมื่อ field เป็นโมฆะ


คุณสามารถใช้ + กับสตริงใน mysql ได้จริงหรือ
Sudhir N
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.