Hướng dẫn cast trong mysql

Trong bài này mình sẽ hướng dẫn cách sử dụng hàm CAST trong MySQL thông qua cú pháp và ví dụ thực tế.

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Mô tả

Hàm CAST chuyển đổi một giá trị từ một kiểu dữ liệu này sang kiểu dữ liệu khác.

2. Cú pháp

Cú pháp của hàm CAST trong MySQL là:

Trong đó:

Bài viết này được đăng tại [free tuts .net]

  • value: Giá trị để chuyển đổi sang kiểu dữ liệu khác.
  • type: Kiểu dữ liệu mà bạn muốn chuyển đổi giá trị thành. Nó có thể là một trong những điều sau đây:
Giá trị Mô tả
DATE Chuyển đổi giá trị thành loại DATE, chỉ có phần ngày. Định dạng là 'YYYY-MM-DD'. Phạm vi được hỗ trợ là '1000-01-01' đến '9999-12-31'.
DATETIME Chuyển đổi giá trị thành loại DATETIME, có cả phần ngày và thời gian. Định dạng là 'YYYY-MM-DD HH: MM: SS'. Phạm vi được hỗ trợ là '1000-01-01 00:00:00' đến '9999-12-31 23:59:59'.
TIME Chuyển đổi giá trị thành loại TIME, chỉ có phần thời gian. Định dạng là 'HH: MM: SS'. Phạm vi được hỗ trợ là '-838: 59: 59' đến '838: 59: 59'.
CHAR Chuyển đổi giá trị thành loại CHAR, là một chuỗi có độ dài cố định.
SIGNED Chuyển đổi giá trị thành loại SIGNED, là số nguyên 64 bit có dấu.
UNSIGNED Chuyển đổi giá trị thành loại UNSIGNED, là số nguyên 64 bit không dấu
BINARY Chuyển đổi giá trị thành loại BINARY, là một chuỗi nhị phân.

3. Version

Hàm CAST có thể được sử dụng trong các phiên bản sau của MySQL:

  • MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1, MySQL 4.0.2

4. Ví dụ

mysql> SELECT CAST['2019-04-2' AS DATE];
Ket qua: '2019-04-02'

mysql> SELECT CAST['2019-04-2 09:15:50' AS DATETIME];
Ket qua: '2019-04-02 09:15:50'

mysql> SELECT CAST['09:15:50' AS TIME];
Ket qua: '09:15:50'

mysql> SELECT CAST[12345678 AS CHAR];
Ket qua: '12345678'

mysql> SELECT CAST[9-12 AS SIGNED];
Ket qua: -3

mysql> SELECT CAST[9-12 AS UNSIGNED];
Ket qua: 18446744073709551613

Trong bài này mình sẽ hướng dẫn cách sử dụng hàm CAST trong MySQL thông qua cú pháp và ví dụ thực tế. 1. Mô tả Hàm CAST chuyển đổi một giá trị từ một kiểu dữ liệu này sang kiểu dữ liệu khác. 2. Cú pháp Cú pháp của hàm CAST trong MySQL ...

Trong bài này mình sẽ hướng dẫn cách sử dụng hàm CAST trong MySQL thông qua cú pháp và ví dụ thực tế.

1. Mô tả

Hàm CAST chuyển đổi một giá trị từ một kiểu dữ liệu này sang kiểu dữ liệu khác.

2. Cú pháp

Cú pháp của hàm CAST trong MySQL là:

Trong đó:

  • value: Giá trị để chuyển đổi sang kiểu dữ liệu khác.
  • type: Kiểu dữ liệu mà bạn muốn chuyển đổi giá trị thành. Nó có thể là một trong những điều sau đây:

3. Version

Hàm CAST có thể được sử dụng trong các phiên bản sau của MySQL:

  • MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1, MySQL 4.0.2

4. Ví dụ

mysql> SELECT CAST['2019-04-2' AS DATE];
Ket qua: '2019-04-02'

mysql> SELECT CAST['2019-04-2 09:15:50' AS DATETIME];
Ket qua: '2019-04-02 09:15:50'

mysql> SELECT CAST['09:15:50' AS TIME];
Ket qua: '09:15:50'

mysql> SELECT CAST[12345678 AS CHAR];
Ket qua: '12345678'

mysql> SELECT CAST[9-12 AS SIGNED];
Ket qua: -3

mysql> SELECT CAST[9-12 AS UNSIGNED];
Ket qua: 18446744073709551613

Nguồn: Zaidap.com.net

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

Quảng cáo

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.

Chủ Đề