ใช้ CAST(value * -1 AS SIGNED) เพื่อแปลงผลคูณเป็น SIGNED (รองรับค่าลบ)
ตัวอย่างการใช้งาน
1. สร้างตารางและข้อมูล
mysql> create table DemoTable (Value int); mysql> insert into DemoTable values(10), (20), (100);
2. คูณ -1 และ CAST เป็น SIGNED
mysql> SELECT CAST(Value * -1 AS SIGNED) FROM DemoTable;
ผลลัพธ์
+--------------------------+ | CAST(Value * -1 AS SIGNED) | +--------------------------+ | -10 | | -20 | | -100 | +--------------------------+
ทำไมต้อง CAST?
- คอลัมน์
INT(SIGNED) คูณ -1 ได้ค่าลบปกติ - แต่ถ้าคอลัมน์เป็น
INT UNSIGNEDผลคูณ -1 จะเกิด Overflow (ค่าบวกมาก) CAST(... AS SIGNED)บังคับให้ผลลัพธ์เป็น SIGNED
ตัวอย่างปัญหา UNSIGNED
mysql> CREATE TABLE t (v INT UNSIGNED); mysql> INSERT INTO t VALUES (10); mysql> SELECT v * -1 FROM t; -- ผลลัพธ์ผิด: 4294967286 (Overflow) mysql> SELECT CAST(v * -1 AS SIGNED) FROM t; -- ถูกต้อง: -10
สรุป
ใช้ CAST(expr AS SIGNED) เสมอเมื่อต้องการผลลัพธ์ลบจากคอลัมน์ UNSIGNED หรือนิพจน์ที่อาจลบได้