CAST là một hàm chuyển đổi kiểu dữ liệu trong SQL Server, dùng để biến một giá trị từ kiểu dữ liệu này sang kiểu dữ liệu khác.
👉 Nó giúp:
Chuyển số sang chuỗi, chuỗi sang số, ngày sang chuỗi,...
Đảm bảo kiểu dữ liệu đồng nhất khi so sánh, tính toán, hoặc kết hợp nhiều bảng (JOIN/UNION...).
CAST (expression AS data_type [(length)])
expression: biểu thức hoặc giá trị cần chuyển.
data_type: kiểu dữ liệu đích (mục tiêu).
length: độ dài tối đa của kiểu dữ liệu (nếu có).
SELECT CAST('100' AS INT) AS SoNguyen;
-- Kết quả: 100
SELECT CAST(123.456 AS INT) AS SoNguyen;
-- Kết quả: 123
SELECT CAST(GETDATE() AS VARCHAR(20)) AS NgayGio;
-- Kết quả: 'Jun 21 2025 9:30AM' (tuỳ hệ thống)
SELECT CAST(1 AS FLOAT) / 3 AS KetQua;
-- Kết quả: 0.333333...
Từ Kiểu | Sang Kiểu | Ghi chú |
---|---|---|
varchar |
int , float , decimal |
Chuỗi phải đúng định dạng số |
float |
int |
Tự động làm tròn xuống |
datetime |
varchar |
Chuyển sang định dạng chuỗi ngày |
int |
varchar |
Dùng để ghép chuỗi |
📌 Ví dụ: Tạo mã sản phẩm "SP001", "SP045"
SELECT 'SP' + RIGHT('000' + CAST(MaSanPham AS VARCHAR), 3) AS MaSP
FROM SanPham;
Mục | CAST | CONVERT |
---|---|---|
Chuẩn | Chuẩn SQL | SQL Server riêng |
Cú pháp | Đơn giản | Hỗ trợ định dạng đặc biệt |
Ví dụ ngày | Không có style định dạng |
Có thể định dạng ngày giờ |
Ví dụ định dạng ngày với CONVERT:
SELECT CONVERT(VARCHAR(10), GETDATE(), 103) AS NgayVN;
-- Kết quả: 21/06/2025
CONVERT ( data_type [ (length) ], expression [, style] )
🔸 Giải thích:
data_type: kiểu dữ liệu bạn muốn chuyển sang (ví dụ VARCHAR, INT, DATETIME,…).
expression: giá trị cần chuyển kiểu.
style (tuỳ chọn): chỉ áp dụng khi data_type là kiểu CHAR, VARCHAR, NCHAR, NVARCHAR dùng để định dạng kiểu ngày giờ (datetime, smalldatetime).
Style | Định dạng | Ví dụ (GETDATE) | Ghi chú |
---|---|---|---|
100 | mon dd yyyy hh:miAM (US) | Jun 21 2025 9:00AM | Mặc định |
101 | mm/dd/yyyy | 06/21/2025 | US |
102 | yyyy.mm.dd | 2025.06.21 | ISO |
103 | dd/mm/yyyy | 21/06/2025 | VN/UK |
104 | dd.mm.yyyy | 21.06.2025 | Đức |
105 | dd-mm-yyyy | 21-06-2025 | Ý |
106 | dd mon yyyy | 21 Jun 2025 | Viết tháng tắt |
112 | yyyymmdd | 20250621 | Không có dấu phân cách |
Một số ví dụ hàm Convert:
DECLARE @So INT = 17
SELECT 'HD' + CONVERT(VARCHAR(6), GETDATE(), 112) + RIGHT('000' + CONVERT(VARCHAR, @So), 3) AS MaHoaDon;
-- Kết quả: HD20250621017
SELECT * FROM DonHang
WHERE CONVERT(VARCHAR(10), NgayDat, 103) = '21/06/2025'
⚠️ Nếu chuyển chuỗi không hợp lệ sang số → gây lỗi:
SELECT CAST('abc' AS INT); -- Sẽ lỗi: conversion failed
⚠️ Nếu chuyển dữ liệu không tương thích (ví dụ datetime không đúng chuẩn), cũng sẽ lỗi.
🔄 Dùng TRY_CAST để tránh lỗi (chỉ có từ SQL Server 2012 trở đi):
SELECT TRY_CAST('abc' AS INT) AS GiaTri; -- Kết quả: NULL
📌 a. Dùng trong WHERE:
SELECT * FROM DonHang
WHERE CAST(NgayDat AS DATE) = '2025-06-21';
📌 b. Dùng trong JOIN khi kiểu dữ liệu khác nhau:
SELECT *
FROM KhachHang K
JOIN DonHang D ON CAST(K.MaKH AS VARCHAR) = D.MaKH;
Hướng dẫn Cast trong SQL Server từ A-Z, ứng dụng khi làm phần mềm thực tế.