Trong MariaDB, CONVERT()
là một hàm được tích hợp sẵn để chuyển đổi một giá trị sang một kiểu dữ liệu khác. Nó nhận một giá trị của một kiểu và trả về một giá trị của kiểu được chỉ định.
Bạn cung cấp giá trị dưới dạng đối số khi bạn gọi hàm, cũng như kiểu mà bạn muốn nó được chuyển đổi thành.
CONVERT()
tương tự như CAST()
.
Cú pháp
CONVERT()
có thể được gọi hàm bằng cú pháp ODBC hoặc cú pháp SQL92.
Cú pháp ODBC:
CONVERT(expr, type)
Cú pháp SQL92:
CONVERT(expr USING charset)
Ở đâu expr
là giá trị cần chuyển đổi, type
là kiểu dữ liệu mà bạn muốn nó được chuyển đổi thành.
Sử dụng cú pháp SQL92, charset
là bộ ký tự mà bạn muốn chuyển đổi thành.
Ví dụ
Đây là một ví dụ đơn giản:
SELECT CONVERT(123.45, INT);
Kết quả:
+----------------------+ | CONVERT(123.45, INT) | +----------------------+ | 123 | +----------------------+
Điều này đã chuyển đổi giá trị thành một số nguyên, loại bỏ các vị trí thập phân.
Đây là một ví dụ khác:
SELECT CONVERT('2020-01-01', DATETIME);
Kết quả:
+---------------------------------+ | CONVERT('2020-01-01', DATETIME) | +---------------------------------+ | 2020-01-01 00:00:00 | +---------------------------------+
Trong trường hợp này, chúng tôi đã chuyển đổi một chuỗi thành DATETIME
kiểu dữ liệu.
Chuyển đổi không thành công
Trong ví dụ trước, chúng tôi đã cung cấp DATE
hợp lệ string (hoặc DATE
nghĩa đen). Do đó MariaDB có thể chuyển đổi giá trị thành DATETIME
kiểu dữ liệu.
Tuy nhiên, đây là điều sẽ xảy ra khi chúng tôi cung cấp DATE
không hợp lệ chuỗi:
SELECT CONVERT('1 Jan, 2020', DATE);
Kết quả:
+------------------------------+ | CONVERT('1 Jan, 2020', DATE) | +------------------------------+ | NULL | +------------------------------+
Tại đây, MariaDB không thể tìm ra cách chuyển đổi giá trị này và trả về NULL
.
Trong trường hợp này, chúng tôi có thể sử dụng một hàm khác, chẳng hạn như STR_TO_DATE()
để thực hiện chuyển đổi như vậy:
SELECT STR_TO_DATE('1 Jan, 2020', '%e %M, %Y');
Kết quả:
+-----------------------------------------+ | STR_TO_DATE('1 Jan, 2020', '%e %M, %Y') | +-----------------------------------------+ | 2020-01-01 | +-----------------------------------------+
Chỉ định một bộ ký tự
Cú pháp SQL92 cho phép chúng tôi chỉ định một bộ ký tự để chuyển đổi thành.
Ví dụ:
SELECT CONVERT('ไม้เมือง' USING tis620);
Kết quả:
+--------------------------------------------------+ | CONVERT('ไม้เมือง' USING tis620) | +--------------------------------------------------+ | ไม้เมือง | +--------------------------------------------------+
Thay đổi bộ ký tự cũng sẽ thay đổi đối chiếu thành đối chiếu mặc định cho bộ ký tự đó.
Ví dụ trên không thực sự chứng minh bộ ký tự / đối chiếu đã thay đổi như thế nào.
May mắn thay, chúng ta có thể sử dụng các hàm như CHARSET()
và COLLATION()
để xem bộ ký tự và đối chiếu đã thay đổi như thế nào:
SELECT
CHARSET('ไม้เมือง') AS a,
COLLATION('ไม้เมือง') AS b,
CHARSET(CONVERT('ไม้เมือง' USING tis620)) AS c,
COLLATION(CONVERT('ไม้เมือง' USING tis620)) AS d;
Kết quả:
+------+-----------------+--------+----------------+ | a | b | c | d | +------+-----------------+--------+----------------+ | utf8 | utf8_general_ci | tis620 | tis620_thai_ci | +------+-----------------+--------+----------------+
Cái đầu tiên sử dụng bộ ký tự và đối chiếu cho kết nối của tôi. Cái thứ hai sử dụng bộ ký tự mà chúng tôi đã chỉ định rõ ràng với CONVERT()
, cũng như đối chiếu mặc định cho bộ ký tự đó.
Xem danh sách các ảnh ghép này có sẵn trong MariaDB để biết danh sách đầy đủ các ảnh ghép và bộ ký tự phù hợp của chúng.
Đối số rỗng
Đang cố gắng chuyển đổi null
trả về null
:
SELECT CONVERT(null, DATETIME);
Kết quả:
+-------------------------+ | CONVERT(null, DATETIME) | +-------------------------+ | NULL | +-------------------------+
Tuy nhiên, chuyển null
mà không chỉ định kiểu dữ liệu mới dẫn đến lỗi cú pháp:
SELECT CONVERT(null);
Kết quả:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1
Thiếu đối số
Đang gọi CONVERT()
mà không chuyển đối số dẫn đến lỗi cú pháp:
SELECT CONVERT();
Kết quả:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1