การแปลงชนิดข้อมูลด้วย CAST() ใน MySQL
ฟังก์ชัน CAST(expression AS type) แปลงค่าจากชนิดหนึ่งไปอีกชนิดหนึ่ง ใน SELECT ใช้ได้ทั้งเพื่อแสดงผล แปลงชนิดเพื่อคำนวณ หรือจัดรูปแบบ
ตัวอย่างการใช้งาน
สร้างตารางวันที่จัดส่ง:
mysql> CREATE TABLE castFunctionDemo (
-> ShippingDate DATE
-> );
Query OK, 0 rows affected (0.74 sec)
mysql> INSERT INTO castFunctionDemo VALUES('2019-01-31'),('2018-07-12'),('2016-12-06'),('2017-08-25');
Query OK, 4 rows affected (0.18 sec)
ข้อมูลต้นฉบับ (DATE):
mysql> SELECT * FROM castFunctionDemo;
+--------------+
| ShippingDate |
+--------------+
| 2019-01-31 |
| 2018-07-12 |
| 2016-12-06 |
| 2017-08-25 |
+--------------+
4 rows in set (0.00 sec)
แปลง DATE → CHAR(12) (สตริงความยาว 12):
mysql> SELECT CAST(ShippingDate AS CHAR(12)) AS Conversion FROM castFunctionDemo;
+------------+
| Conversion |
+------------+
| 2019-01-31 |
| 2018-07-12 |
| 2016-12-06 |
| 2017-08-25 |
+------------+
4 rows in set (0.00 sec)
ชนิดข้อมูล (Type) ที่รองรับใน CAST
| Type | คำอธิบาย |
|---|---|
| BINARY[(N)] | Binary string (VARBINARY) |
| CHAR[(N)] | Fixed-length string |
| DATE | Date (YYYY-MM-DD) |
| DATETIME | Date & Time |
| DECIMAL[(M[,D])] | Exact numeric |
| JSON | JSON document (MySQL 5.7+) |
| SIGNED [INTEGER] | Signed integer |
| TIME | Time (HH:MM:SS) |
| UNSIGNED [INTEGER] | Unsigned integer |
ตัวอย่างเพิ่มเติม
-- String to Number
SELECT CAST('123' AS UNSIGNED); -- 123
SELECT CAST('-45' AS SIGNED); -- -45
-- Number to String
SELECT CAST(123 AS CHAR); -- '123'
-- Date String to Date
SELECT CAST('2023-12-31' AS DATE); -- 2023-12-31
-- Decimal precision
SELECT CAST(10.5678 AS DECIMAL(10,2)); -- 10.57
คำอธิบาย
CAST(... AS CHAR(N))จะตัดหรือเติม Space ให้ยาว N ตัวอักษร- ต่างจาก
CONVERT()ที่รองรับ USING charset (เช่น CONVERT(str USING utf8mb4)) - ใน WHERE/ORDER BY การ CAST สามารถช่วยให้ Index ทำงานได้หรือไม่ทำงานได้ ขึ้นกับชนิดและการใช้งาน