Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

คูณ Unsigned INT ด้วย -1 ใน MySQL SELECT

ใช้ 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 หรือนิพจน์ที่อาจลบได้