MySQL không cho phép khai báo kiểu dữ liệu trực tiếp cho alias (ví dụ: SELECT col AS alias INT sai cú pháp). Để kiểm soát kiểu dữ liệu của cột kết quả, hãy dùng CAST() bên trong biểu thức CASE.
Ví dụ: Đảo dấu giá trị theo Status (0=dương, 1=âm)
Tạo bảng:
mysql> CREATE TABLE DemoTable1505 (
-> Value INT UNSIGNED,
-> Status TINYINT(1)
-> );
Chèn dữ liệu:
mysql> INSERT INTO DemoTable1505 VALUES (20, 0), (45, 1);
Truy vấn: ép Value sang SIGNED (có dấu) rồi nhân ±1 theo Status:
mysql> SELECT CASE Status
-> WHEN 0 THEN CAST(Value AS SIGNED) * 1
-> WHEN 1 THEN CAST(Value AS SIGNED) * -1
-> END AS AllValues
-> FROM DemoTable1505;
Kết quả (cột AllValues mang kiểu SIGNED):
+-----------+ | AllValues | +-----------+ | 20 | | -45 | +-----------+
Giải thích
CAST(Value AS SIGNED)chuyểnUNSIGNEDsangSIGNEDđể cho phép giá trị âm.- Câu
CASEtrả về kiểu dữ liệu chung của các nhánh – ở đây làSIGNED. - Alias
AllValueskế thừa kiểu của biểu thức CASE.
Các hàm ép kiểu phổ biến
| Hàm | Kiểu đích | Ví dụ |
|---|---|---|
CAST(expr AS TYPE) | BINARY, CHAR, DATE, DATETIME, TIME, DECIMAL, SIGNED, UNSIGNED | CAST('123' AS UNSIGNED) |
CONVERT(expr, TYPE) | Tương tự CAST, hỗ trợ CHARSET | CONVERT('abc' USING utf8mb4) |
Mẹo
Nếu chỉ cần ép kiểu đơn giản (không CASE), dùng trực tiếp: SELECT CAST(cot AS DECIMAL(10,2)) AS alias FROM bang.