Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách ép kiểu alias cột sang kiểu dữ liệu cụ thể trong MySQL bằng CASE

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ển UNSIGNED sang SIGNED để cho phép giá trị âm.
  • Câu CASE trả về kiểu dữ liệu chung của các nhánh – ở đây là SIGNED.
  • Alias AllValues kế thừa kiểu của biểu thức CASE.

Các hàm ép kiểu phổ biến

HàmKiểu đíchVí dụ
CAST(expr AS TYPE)BINARY, CHAR, DATE, DATETIME, TIME, DECIMAL, SIGNED, UNSIGNEDCAST('123' AS UNSIGNED)
CONVERT(expr, TYPE)Tương tự CAST, hỗ trợ CHARSETCONVERT('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.