การแปลงค่า BOOL/BOOLEAN ให้เป็น INTEGER (0/1) ด้วย CAST
ใน MySQL BOOL และ BOOLEAN เป็น Alias ของ TINYINT(1) ค่า TRUE = 1, FALSE = 0 การใช้ CAST() ช่วยให้ชัดเจนและควบคุมชนิดข้อมูลผลลัพธ์
ตัวอย่างการใช้งาน
สร้างตารางชนิด BOOL:
mysql> CREATE TABLE convertBoolToIntDemo (
-> isYoung BOOL
-> );
Query OK, 0 rows affected (0.69 sec)
mysql> INSERT INTO convertBoolToIntDemo VALUES(TRUE), (FALSE), (TRUE), (FALSE);
Query OK, 4 rows affected (0.12 sec)
ข้อมูลดิบ (แสดงเป็น 1/0 แล้วเพราะเป็น TINYINT):
mysql> SELECT * FROM convertBoolToIntDemo;
+---------+
| isYoung |
+---------+
| 1 |
| 0 |
| 1 |
| 0 |
+---------+
4 rows in set (0.00 sec)
แปลงเป็น SIGNED INTEGER อย่างชัดเจน:
mysql> SELECT CAST(isYoung = 1 AS SIGNED INTEGER) FROM convertBoolToIntDemo;
+-----------------------------------+
| CAST(isYoung=1 AS SIGNED INTEGER) |
+-----------------------------------+
| 1 |
| 0 |
| 1 |
| 0 |
+-----------------------------------+
4 rows in set (0.00 sec)
คำอธิบาย
isYoung = 1เป็น Boolean Expression คืนค่า 1 (TRUE) หรือ 0 (FALSE)CAST(... AS SIGNED INTEGER)แปลงผล Boolean ให้เป็น INTEGER อย่างชัดเจน- MySQL แปลง BOOL → TINYINT(1) อัตโนมัติตอนสร้างตาราง (ดูได้จาก DESC)
วิธีง่ายกว่า (Implicit Cast)
SELECT isYoung + 0 FROM convertBoolToIntDemo; -- 1,0,1,0
SELECT isYoung * 1 FROM convertBoolToIntDemo; -- 1,0,1,0
SELECT CAST(isYoung AS UNSIGNED) FROM convertBoolToIntDemo; -- 1,0,1,0
การบวก 0 หรือคูณ 1 บังคับ Type Conversion ให้เป็น Number ทันที สั้นกว่า CAST
ตรวจสอบชนิดข้อมูลจริงในตาราง
mysql> DESC convertBoolToIntDemo;
+--------------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+-------------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(20) | YES | | NULL | |
| isAgeGreaterThan18 | tinyint(1) | YES | | NULL | |
+--------------------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
เห็นว่า BOOL กลายเป็น TINYINT(1) จริงๆ แล้ว