Di MariaDB, CAST()
adalah fungsi bawaan yang mengubah nilai ke tipe data lain. Dibutuhkan nilai dari satu jenis dan mengembalikan nilai dari jenis yang ditentukan.
Anda memberikan nilai sebagai argumen saat Anda memanggil fungsi, serta jenis yang Anda inginkan untuk dikonversi.
CAST()
bekerja mirip dengan CONVERT()
.
Sintaks
Sintaksnya seperti ini:
CAST(expr AS type)
Dimana expr
adalah nilai yang akan dikonversi, dan type
adalah tipe data yang Anda inginkan untuk dikonversi.
Contoh
Berikut ini contoh sederhananya:
SELECT CAST(123.45 AS INT);
Hasil:
+---------------------+| CAST(123,45 SEBAGAI INT) |+---------------------+| 123 |+---------------------+
Ini memberikan nilai ke bilangan bulat, dan oleh karena itu, tempat desimal telah dihapus.
Ini contoh lain:
SELECT CAST('2020-01-01' AS DATETIME);
Hasil:
+--------------------------------+| CAST('01-01-2020' AS DATETIME) |+--------------------------------+| 01-01 2020 00:00:00 |+--------------------------------+
Dalam hal ini, kami mengonversi string menjadi DATETIME
tipe data.
Kegagalan Konversi
Pada contoh sebelumnya, kami menyediakan DATE
. yang valid string (atau DATE
harfiah). Oleh karena itu MariaDB dapat mengonversi nilai menjadi DATETIME
tipe data.
Namun, inilah yang terjadi jika kami memberikan DATE
yang tidak valid string:
SELECT CAST('1 Jan, 2020' AS DATE);
Hasil:
+-----------------------------+| CAST('1 Jan, 2020' SEBAGAI TANGGAL) |+------------------------------+| NULL |+----------------------------+
Di sini, MariaDB tampaknya tidak tahu cara mengonversi nilai ini dan mengembalikan NULL
.
Dalam hal ini, kita bisa menggunakan fungsi lain, seperti STR_TO_DATE()
untuk melakukan konversi seperti itu:
SELECT STR_TO_DATE('1 Jan, 2020', '%e %M, %Y');
Hasil:
+-----------------------------------------+| STR_TO_DATE('1 Jan, 2020', '%e %M, %Y') |+----------------------------- ------------+| 01-01-2020 |+---------------------------------+Tentukan Kumpulan Karakter
Anda dapat menentukan set karakter yang akan digunakan untuk nilai kembalian saat menggunakan
CAST()
fungsi.Contoh:
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";
Hasil:
+--------+------------------+------------------ -+-----------------+| 123 | utf16 | latin1 | big5 |+--------+------------------+------------------- +-----------------+| biner | utf16_general_ci | latin1_swedish_ci | big5_chinese_ci |+--------+------------------+------------------- +-----------------+Di sini, kami menggunakan
COLLATION()
berfungsi untuk mengembalikan susunan setiap nilai setelah dilemparkan ke tipe data baru. Setiap nilai menggunakan susunan default untuk kumpulan karakter yang ditentukan.Nilai awal bukan string, jadi
COLLATION()
mengembalikan biner.Mengonversi ke
CHAR
tanpa menentukan set karakter akan menghasilkancollation_connection
kumpulan karakter yang digunakan.Tentukan Collation
Anda juga dapat menentukan susunan.
Contoh:
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";
Hasil:
+--------+--------------------+---------------- ---+-----------------------+| 123 | utf16 | latin1 | big5 |+--------+--------------------+----------------- --+-----------------------+| biner | utf16_icelandic_ci | latin1_german2_ci | big5_chinese_nopad_ci |+--------+--------------------+----------------- --+------------------------+Dalam hal ini, kami secara eksplisit menentukan susunan yang akan digunakan yang bukan susunan default untuk kumpulan karakter yang ditentukan (walaupun masih merupakan susunan yang valid untuk kumpulan karakter).
Menentukan susunan yang tidak valid untuk kumpulan karakter akan menghasilkan kesalahan.
Inilah yang terjadi ketika saya mengganti dua susunan pertama:
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";
Hasil:
ERROR 1253 (42000):COLLATION 'latin1_german2_ci' tidak valid untuk CHARACTER SET 'utf16'Itu sampai ke yang pertama dan menimbulkan kesalahan, karena
latin1_german2_ci
bukan susunan yang valid untukutf16
kumpulan karakter.Lihat daftar susunan yang tersedia di MariaDB untuk daftar lengkap susunan dan set karakter yang cocok.
Argumen Null
Mencoba mengonversi
null
mengembalikannull
:SELECT CAST(null AS DATETIME);
Hasil:
+------------------------+| CAST(null AS DATETIME) |+-----------------------+| NULL |+-----------------------+Namun, melewati
null
tanpa menentukan tipe data baru akan menghasilkan kesalahan:SELECT CAST(null);
Hasil:
ERROR 1064 (42000):Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MariaDB Anda untuk sintaks yang tepat untuk digunakan di dekat ')' di baris 1Argumen Tidak Ada
Memanggil
CAST()
tanpa meneruskan argumen menghasilkan kesalahan:SELECT CAST();
Hasil:
ERROR 1064 (42000):Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MariaDB Anda untuk sintaks yang tepat untuk digunakan di dekat ')' di baris 1