Cast trong SQL Server

Hướng dẫn Cast trong SQL Server từ A-Z, ứng dụng khi làm phần mềm thực tế.

1. CAST trong SQL Server là gì ?

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...).

2. Cú pháp sử dụng Cast trong SQL Server

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ó).

3. Các ví dụ thực tế hàm Cast SQL Server

Ví dụ 1: Chuyển chuỗi thành số nguyên

SELECT CAST('100' AS INT) AS SoNguyen;

-- Kết quả: 100

Ví dụ 2: Chuyển số thực sang số nguyên (sẽ bỏ phần thập phân)

SELECT CAST(123.456 AS INT) AS SoNguyen;
-- Kết quả: 123

Ví dụ 3: Chuyển datetime sang varchar

SELECT CAST(GETDATE() AS VARCHAR(20)) AS NgayGio;
-- Kết quả: 'Jun 21 2025  9:30AM' (tuỳ hệ thống)

Ví dụ 4: Trong phép chia số nguyên, dùng CAST để lấy kết quả thập phân

SELECT CAST(1 AS FLOAT) / 3 AS KetQua;
-- Kết quả: 0.333333...

4. Các kiểu dữ liệu thường dùng trong CAST

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

5. Kết hợp CAST trong các tình huống thực tế

📌 Ví dụ: Tạo mã sản phẩm "SP001", "SP045"

SELECT 'SP' + RIGHT('000' + CAST(MaSanPham AS VARCHAR), 3) AS MaSP
FROM SanPham;

6. Khác biệt giữa CAST và CONVERT

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'

 

7. Lưu ý khi dùng CAST trong SQL Server

    ⚠️ 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

8. Dùng CAST trong các thao tác nâng cao

📌 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;

Bài viết liên quan:

Hướng dẫn Cast trong SQL Server từ A-Z, ứng dụng khi làm phần mềm thực tế.