Cú pháp
Hàm CAST trong MySQL / MariaDB chuyển đổi một giá trị hoặc biểu thức từ một kiểu dữ liệu này sang kiểu dữ liệu khác. Minh thấy hàm CAST so với hàm CONVERT chỉ khác nhau về cú pháp, còn chức năng thì giống nhau hoàn toàn, chưa thấy khác gì nhau.
CAST(expr AS type [ARRAY])
Trong đó:
expr: biển thức hoặc giá trị cần chuyển đổi
type[array]: kiểu dữ liệu mà bạn muốn chuyển đổi sang, [array] có thể hiểu là tùy chọn của kiểu dữ liệu
Các kiểu dữ liệu
Kiểu dữ liệu | Mô tả |
DATE | Trả về kiểu dữ liệu ngày tháng YYY-MM-DD |
DATETIME[m] | Trả về kiểu dữ liệu ngày tháng YYYY-MM-DD HH:MM:SS. Nếu m được khai báo thì kết quả trả về sẽ bao gồm độ dài mini giây phía sau. |
TIME[m] | Trả về kiểu dữ liệu giờ phút HH:MM:SS. Nếu m được khai báo thì kết quả trả về là độ dài mini giây phía sau. |
SIGNED | Trả về kiểu dữ liệu số nguyên có dấu BIGINT (dấu âm dương) |
UNSIGNED | Trả về kiểu dữ liệu số nguyên không dấu BIGINT |
DECIMAL[m,d] | Trả về kiểu dữ liệu số thập phân. Nếu d và m được khai báo thì m-d là số chữ số phần nguyên và d là số chữ số hàng thập phân |
BINARY | Trả về kiểu dữ liệu BINARY (chuỗi binary) |
JSON | Trả về kiểu dữ liệu JSON (mình sẽ có 1 bài về kiểu dữ liệu này) |
CHAR[m] | Trả về kiểu dữ liệu VARCHAR. Nếu m được khai báo thì kết quả trả về chuỗi có độ dài là m. Nếu độ dài của chuỗi nhỏ hơn m thì không có khoảng trắng, ngược lại độ dài chuỗi lớn hơn m thì chuỗi bị cắt đi. Nếu chuỗi quá dài kết quả trả về sẽ là kiểu TEXT hoặc LONGTEXT |
Một số ví dụ
Ví dụ về kiểu CHAR. Nếu tùy chọn charater set không được khai báo thì kết quả trả về sẽ sử dụng character set và collation mặc định. Phần này nâng cao 1 chút mình sẽ nói ở cuối bài. Lưu ý cách sử dụng
SELECT CAST(1500 AS CHAR(2)); -- > kết quả 15
SELECT CAST('test' AS CHAR CHARACTER SET utf8);
SELECT CAST('test' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;
Ví dụ về kiểu DATETIME.
SELECT CAST('2022-05-21 14:06:10' AS TIME); -- > kết quả 14:06:10
SELECT CAST('14:50:23.25642' AS TIME(3)); -- > kết quả 14:50:23.256
SELECT CAST('2021/12/15 12:13:56' AS DATETIME(3)); -- > kết quả '2021-12-15 12:13:56.000'
Ví dụ về kiểu DECIMAL. Nhìn ví dụ các bạn có thể thấy nếu độ dài phần nguyên lớn hơn m-d thì kết quả trả về bị sai. Nếu m không được khai báo thì phần nguyên có độ dài tối đa là 10
SELECT CAST('123456.0104' AS decimal(8,2)); -- > kết quả đúng '123456.01'
SELECT CAST('123456.0104' AS decimal(7,2)); -- > kết quả sai '99999.99'
SELECT CAST('123456.0104' AS decimal(6)); -- > kết quả '123456'
SELECT CAST('12345678901.0104' AS decimal); -- > kết quả sai '9999999999'
Character set và Collation mặc định
Trong hàm CAST nếu bạn khai báo CHARACTER SET thì hàm sẽ sử dụng Collation mặc định của CHARATER SET đó
Để xem collation mặc định của CHARACTER SET ta sử dụng lệnh
SHOW CHARACTER SET;
Nếu bạn không khai báo CHARACTER SET thì hàm sẽ sử dụng character set và collation từ biến hệ thống character_set_connection và collation_connection
Ta sử dụng lệnh sau để kiểm tra character set và collation
SELECT * FROM performance_schema.session_variables
WHERE VARIABLE_NAME IN (
'character_set_client', 'character_set_connection',
'character_set_results', 'collation_connection'
) ORDER BY VARIABLE_NAME;
Hoặc có thể dùng lệnh
SHOW SESSION VARIABLES LIKE 'character\_set\_%';
SHOW SESSION VARIABLES LIKE 'collation\_%';
Bài viết dựa trên MySQL Document và chạy trên MySQL 8.0.26 và MariaDB 10.2. Mong được các bạn đóng góp ý kiến để website ngày càng phát triển.