Hàm CAST trong MySQL / MariaDB

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ệuMô tả
DATETrả 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.
SIGNEDTrả về kiểu dữ liệu số nguyên có dấu BIGINT (dấu âm dương)
UNSIGNEDTrả 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 dm đượ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
BINARYTrả về kiểu dữ liệu BINARY (chuỗi binary)
JSONTrả 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

Quảng cáo

Ủng hộ website

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 setcollation từ biến hệ thống  character_set_connectioncollation_connection

Ta sử dụng lệnh sau để kiểm tra character setcollation

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;
character set connection

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.

Add Comment