MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Cách CAST () hoạt động trong MariaDB

Trong MariaDB, CAST() 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.

CAST() hoạt động tương tự như CONVERT() .

Cú pháp

Cú pháp như sau:

CAST(expr AS type)

Ở đâu expr là giá trị để chuyển đổi và type là kiểu dữ liệu mà bạn muốn nó được chuyển đổi thành.

Ví dụ

Đây là một ví dụ đơn giản:

SELECT CAST(123.45 AS INT);

Kết quả:

+---------------------+
| CAST(123.45 AS INT) |
+---------------------+
|                 123 |
+---------------------+

Điều này truyền giá trị thành một số nguyên và do đó, các vị trí thập phân đã bị xóa.

Đây là một ví dụ khác:

SELECT CAST('2020-01-01' AS DATETIME);

Kết quả:

+--------------------------------+
| CAST('2020-01-01' AS 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 CAST('1 Jan, 2020' AS DATE);

Kết quả:

+-----------------------------+
| CAST('1 Jan, 2020' AS DATE) |
+-----------------------------+
| NULL                        |
+-----------------------------+

Ở đây, MariaDB dường như 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ó thể chỉ định một bộ ký tự để sử dụng cho giá trị trả về khi sử dụng CAST() hàm số.

Ví dụ:

SELECT 
    COLLATION(123) AS "123",
    COLLATION(CAST(123 AS CHAR CHARACTER SET utf16)) AS "utf16",
    COLLATION(CAST(123 AS CHAR CHARACTER SET latin1)) AS "latin1",
    COLLATION(CAST(123 AS CHAR CHARACTER SET big5)) AS "big5";

Kết quả:

+--------+------------------+-------------------+-----------------+
| 123    | utf16            | latin1            | big5            |
+--------+------------------+-------------------+-----------------+
| binary | utf16_general_ci | latin1_swedish_ci | big5_chinese_ci |
+--------+------------------+-------------------+-----------------+

Ở đây, chúng tôi đã sử dụng COLLATION() hàm để trả về đối chiếu của từng giá trị sau khi nó được truyền sang kiểu dữ liệu mới. Mỗi giá trị sử dụng đối chiếu mặc định cho bộ ký tự được chỉ định.

Giá trị ban đầu không phải là một chuỗi và vì vậy COLLATION() trả về nhị phân.

Chuyển đổi sang CHAR mà không chỉ định bộ ký tự sẽ dẫn đến collation_connection đối chiếu bộ ký tự đang được sử dụng.

Chỉ định một đối chiếu

Cũng có thể chỉ định đối chiếu.

Ví dụ:

SELECT 
    COLLATION(123) AS "123",
    COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE utf16_icelandic_ci) AS "utf16",
    COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE latin1_german2_ci) AS "latin1",
    COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";

Kết quả:

+--------+--------------------+-------------------+-----------------------+
| 123    | utf16              | latin1            | big5                  |
+--------+--------------------+-------------------+-----------------------+
| binary | utf16_icelandic_ci | latin1_german2_ci | big5_chinese_nopad_ci |
+--------+--------------------+-------------------+-----------------------+

Trong trường hợp này, chúng tôi đã chỉ định rõ ràng một đối chiếu để sử dụng mà không phải là đối chiếu mặc định cho bộ ký tự được chỉ định (mặc dù vẫn là một đối chiếu hợp lệ cho bộ ký tự).

Việc chỉ định đối chiếu không hợp lệ cho bộ ký tự dẫn đến lỗi.

Đây là những gì sẽ xảy ra khi tôi chuyển đổi hai đối chiếu đầu tiên:

SELECT 
    COLLATION(123) AS "123",
    COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE latin1_german2_ci) AS "utf16",
    COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE utf16_icelandic_ci) AS "latin1",
    COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";

Kết quả:

ERROR 1253 (42000): COLLATION 'latin1_german2_ci' is not valid for CHARACTER SET 'utf16'

Nó đến cái đầu tiên và gặp lỗi, vì latin1_german2_ci không phải là đối chiếu hợp lệ cho utf16 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 CAST(null AS DATETIME);

Kết quả:

+------------------------+
| CAST(null AS 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:

SELECT CAST(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 CAST() mà không chuyển đối số dẫn đến lỗi:

SELECT CAST();

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giới thiệu Giám sát cơ sở dữ liệu dựa trên tác nhân với ClusterControl 1.7

  2. DBaaS, định tuyến truy vấn đám mây và trong suốt

  3. Phần 1:Phân loại hình ảnh với Máy chủ MariaDB và TensorFlow - Tổng quan

  4. Cách ASCII () hoạt động trong MariaDB

  5. MariaDB LAST_INSERT_ID () Giải thích