AnalyticDB for MySQL memungkinkan penggunaan fungsi CAST untuk mengonversi nilai dari satu tipe data ke tipe data lainnya. Topik ini menjelaskan cara menggunakan fungsi CAST.
Sintaksis
CAST (expr AS type)Parameter:
expr: Data sumber. Parameter ini wajib diisi.type: Tipe data tujuan. Parameter ini wajib diisi.
CAST AS BOOLEAN
CAST (expr AS BOOLEAN)Deskripsi
Mengonversi nilai yang ditentukan oleh expr menjadi tipe BOOLEAN.
Tipe data sumber
DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, atau TINYINT
BIGINT
DOUBLE
VARCHAR
JSON
Aturan konversi
Tipe data sumber | Tipe data tujuan | Aturan konversi |
| BOOLAEN |
|
DOUBLE | BOOLAEN |
|
| BOOLAEN |
|
Contoh
Contoh 1
Eksekusi pernyataan berikut untuk mengonversi nilai 1 dari tipe INT ke tipe BOOLEAN:
SELECT CAST('1' AS BOOLEAN);Hasil berikut dikembalikan:
+----------------------+
| CAST('1' AS BOOLEAN) |
+----------------------+
| 1 |
+----------------------+Contoh 2
Eksekusi pernyataan berikut untuk mengonversi nilai a dari tipe VARCHAR ke tipe BOOLEAN:
SELECT CAST('a' AS BOOLEAN);Hasil berikut dikembalikan:
NULLContoh 3
Eksekusi pernyataan berikut untuk mengonversi nilai 4.3 dari tipe DOUBLE ke tipe BOOLEAN:
SELECT CAST(4.3 AS BOOLEAN);Hasil berikut dikembalikan:
+----------------------+
| CAST(4.3 AS BOOLEAN) |
+----------------------+
| 1 |
+----------------------+Contoh 4
Eksekusi pernyataan berikut untuk mengonversi nilai 5 dari tipe INT ke tipe BOOLEAN:
SELECT CAST(5 AS BOOLEAN);Hasil berikut dikembalikan:
+--------------------+
| CAST(5 AS BOOLEAN) |
+--------------------+
| 1 |
+--------------------+CAST AS DECIMAL(m,d)|FLOAT|INT|INTEGER|SMALLINT|TINYINT
CAST (expr AS [DECIMAL(m,d)|FLOAT|INT|INTEGER|SMALLINT|TINYINT])Deskripsi
Mengonversi nilai yang ditentukan oleh expr menjadi tipe DECIMAL(M,D), FLOAT, INT, INTEGER, SMALLINT, atau TINYINT.
Tipe data sumber
DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, atau TINYINT
BIGINT
DOUBLE
VARCHAR
JSON
Aturan konversi
Jika nilai yang ditentukan oleh
exprtidak dalam rentang nilai yang diizinkan dari tipe data tujuan,nullakan dikembalikan selama konversi.Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai
99999999dari tipe BIGINT ke tipe SMALLINT:SELECT CAST(99999999 as SMALLINT);NULL dikembalikan karena
99999999tidak dalam rentang nilai yang diizinkan dari tipe SMALLINT.NULLJika Anda mengonversi nilai dari tipe data presisi tinggi ke tipe data presisi rendah, nilai tersebut akan dibulatkan setelah konversi.
Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai
1.23456789dari tipe DOUBLE ke tipe FLOAT:SELECT CAST(1.23456789 AS FLOAT);Hasil berikut dikembalikan:
+---------------------------+ | CAST(1.23456789 AS FLOAT) | +---------------------------+ | 1.2345679 | +---------------------------+Jika Anda mengonversi nilai dari tipe DECIMAL(M,D), DOUBLE, atau FLOAT ke tipe INT/INTEGER, SMALLINT, atau TINYINT, nilai dibulatkan setelah konversi.
Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai
1.1342dari tipe FLOAT ke tipe INT:SELECT CAST(1.1342 AS INT);Hasil berikut dikembalikan:
+---------------------+ | CAST(1.1342 AS INT) | +---------------------+ | 1 | +---------------------+Jika nilai yang ditentukan oleh
expradalah tipe VARCHAR dan bukan angka, NULL dikembalikan ketika nilai dikonversi ke tipe DECIMAL(M,D) atau FLOAT.Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai
Chinadari tipe VARCHAR ke tipe DECIMAL(M,D):SELECT cast( 'China' AS decimal(5,2));Hasil berikut dikembalikan:
NULLJika nilai yang ditentukan oleh
expradalah tipe VARCHAR dan bukan angka, nilai 0 dikembalikan setelah nilai dikonversi ke tipe INT/INTEGER, SMALLINT, atau TINYINT.Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai
Chinadari tipe VARCHAR ke tipe SMALLINT:SELECT CAST( 'China' AS SMALLINT);Hasil berikut dikembalikan:
+----------------------------+ | CAST( 'China' AS SMALLINT) | +----------------------------+ | 0 | +----------------------------+Jika nilai yang ditentukan oleh
expradalah tipe JSON dan bukan angka, kesalahan dikembalikan ketika nilai dikonversi ke tipe INT/INTEGER, SMALLINT, atau TINYINT.Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai
[1,2,3]dari tipe VARCHAR ke tipe JSON, lalu ke tipe SMALLINT:SELECT CAST(CAST('[1,2,3]' AS JSON) AS SMALLINT);Pesan kesalahan berikut dikembalikan:
ERROR 1815 (HY000): [20034, 2021091814103119216818804803453190138] : Cannot cast json to smallint
Contoh
Eksekusi pernyataan berikut untuk mengonversi nilai 2001012 dari tipe BIGINT ke tipe FLOAT:
SELECT CAST(2001012 AS FLOAT);Hasil berikut dikembalikan:
+-------------------------+
| CAST(2001012 AS FLOAT) |
+-------------------------+
| 2001012.0 |
+-------------------------+CAST AS BIGINT
CAST (expr AS BIGINT)Deskripsi
Mengonversi nilai yang ditentukan oleh expr menjadi tipe BIGINT.
Tipe data sumber
BOOLEAN
DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, atau TINYINT
DOUBLE
DATE, DATETIME, TIMESTAMP, atau TIME
VARCHAR
Aturan konversi
Jika nilai VARCHAR sumber bukan angka, nilai 0 dikembalikan setelah nilai sumber dikonversi ke tipe BIGINT.
Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai
adari tipe VARCHAR ke tipe BIGINT:SELECT CAST('a' AS BIGINT);Hasil berikut dikembalikan:
+---------------------+ | CAST('a' AS BIGINT) | +---------------------+ | 0 | +---------------------+Jika Anda mengonversi nilai dari tipe FLOAT, DOUBLE, atau DECIMAL(M,D) ke tipe BIGINT, data dibulatkan setelah konversi.
Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai
1.23456789dari tipe DOUBLE ke tipe BIGINT:SELECT CAST(1.23456789 AS BIGINT);Hasil berikut dikembalikan:
+----------------------------+ | CAST(1.23456789 AS BIGINT) | +----------------------------+ | 1 | +----------------------------+Jika nilai JSON sumber bukan angka, NULL dikembalikan ketika nilai sumber dikonversi ke tipe BIGINT.
Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai
{}dari tipe JSON ke tipe BIGINT:SELECT CAST(JSON'{}'AS BIGINT);Hasil berikut dikembalikan:
NULL
Contoh
Eksekusi pernyataan berikut untuk mengonversi nilai
2021-09-18dari tipe DATE ke tipe BIGINT:SELECT CAST(DATE '2021-09-18' AS BIGINT);Hasil berikut dikembalikan:
+-----------------------------------+ | CAST(DATE '2021-09-18' AS BIGINT) | +-----------------------------------+ | 20210918 | +-----------------------------------+Eksekusi pernyataan berikut untuk mengonversi nilai
-1dari tipe JSON ke tipe BIGINT:SELECT CAST(JSON '-1' AS BIGINT);Hasil berikut dikembalikan:
+---------------------------+ | CAST(JSON '-1' AS BIGINT) | +---------------------------+ | -1 | +---------------------------+Eksekusi pernyataan berikut untuk mengonversi nilai
FLOOR(4/5)dari tipe DOUBLE ke tipe BIGINT:SELECT CAST(FLOOR(4/5) as BIGINT);Hasil berikut dikembalikan:
+---------------------------+ |CAST(FLOOR(4/5) as BIGINT) | +---------------------------+ | 0 | +---------------------------+
CAST AS DOUBLE
CAST (expr AS DOUBLE)Deskripsi
Mengonversi nilai yang ditentukan oleh expr menjadi tipe DOUBLE.
Tipe data sumber
BOOLEAN
DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, atau TINYINT
BIGINT
DATE, DATETIME, TIMESTAMP, atau TIME
VARCHAR
JSON
Aturan konversi
Jika nilai VARCHAR sumber bukan angka, nilai 0.0 dikembalikan setelah nilai sumber dikonversi ke tipe DOUBLE.
Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai
Chinadari tipe VARCHAR ke tipe DOUBLE:SELECT CAST( 'China' AS DOUBLE);Hasil berikut dikembalikan:
+--------------------------+ | CAST( 'China' AS DOUBLE) | +--------------------------+ | 0.0 | +--------------------------+Jika nilai JSON sumber bukan angka, NULL dikembalikan ketika nilai sumber dikonversi ke tipe DOUBLE.
Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai
{}dari tipe JSON ke tipe DOUBLE:SELECT CAST(JSON '{}' AS DOUBLE);Hasil berikut dikembalikan:
NULL
Contoh
Eksekusi pernyataan berikut untuk mengonversi nilai 2021-09-17 dari tipe DATE ke tipe DOUBLE:
SELECT CAST(DATE '2021-09-17' AS DOUBLE);Hasil berikut dikembalikan:
+------------------------------------+
| CAST(DATE '2021-09-17' AS DOUBLE) |
+------------------------------------+
| 2.0210917E7 |
+------------------------------------+CAST AS DATE|DATETIME|TIMESTAMP|TIME
CAST (expr AS DATE|DATETIME|TIMESTAMP|TIME)Deskripsi
Mengonversi nilai yang ditentukan oleh expr menjadi tipe DATE, DATETIME, TIMESTAMP, atau TIME.
Tipe data sumber
DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, atau TINYINT
BIGINT
DOUBLE
DATE, DATETIME, TIMESTAMP, atau TIME
VARCHAR
JSON
Aturan konversi
Jika nilai VARCHAR atau BIGINT sumber tidak sesuai dengan format TIME, NULL dikembalikan setelah konversi.
Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai
adari tipe VARCHAR ke tipe TIME:SELECT CAST('a' AS TIME);Nilai NULL dikembalikan seperti yang ditunjukkan pada hasil berikut karena nilai sumber tidak sesuai dengan format TIME:
+-------------------+ | CAST('a' AS TIME) | +-------------------+ | NULL | +-------------------+Jika tipe data tujuan berisi waktu dan tanggal tetapi informasi terkait tidak termasuk dalam data sumber, aturan berikut berlaku:
Secara default, jika waktu tidak termasuk dalam nilai yang ditentukan oleh
expr, nilai00:00:00dikembalikan setelah konversi.Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai
2001-1-22dari tipe TIMESTAMP ke tipe TIME:SELECT CAST(TIMESTAMP '2001-1-22' AS TIME);Nilai
00:00:00dikembalikan seperti yang ditunjukkan pada hasil berikut. Hal ini karena waktu tidak termasuk dalam data sumber.+-------------------------------------+ | CAST(TIMESTAMP '2001-1-22' AS TIME) | +-------------------------------------+ | 00:00:00 | +-------------------------------------+Secara default, jika tanggal tidak termasuk dalam nilai yang ditentukan oleh
expr, tanggal sistem saat kueri dieksekusi di klien dikembalikan setelah konversi.Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai
00:00:00dari tipe TIME ke tipe DATE:SELECT CAST(TIME '00:00:00' AS DATE);Tanggal sistem saat kueri dieksekusi dikembalikan seperti yang ditunjukkan pada hasil berikut. Hal ini karena tanggal tidak termasuk dalam data sumber.
+-------------------------------+ | CAST(TIME '00:00:00' AS DATE) | +-------------------------------+ | 2021-09-14 | +-------------------------------+
Contoh
Eksekusi pernyataan berikut untuk mengonversi nilai 20010122000000 dari tipe BIGINT ke tipe DATE:
SELECT CAST(20010122000000 AS DATE);Hasil berikut dikembalikan:
+------------------------------+
| CAST(20010122000000 AS DATE) |
+------------------------------+
| 2001-01-22 |
+------------------------------+CAST AS VARBINARY
CAST (expr AS VARBINARY)Deskripsi
Mengonversi nilai yang ditentukan oleh expr menjadi tipe VARBINARY.
Tipe data sumber
BOOLEAN
DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, atau TINYINT
BIGINT
DOUBLE
DATE, DATETIME, TIMESTAMP, atau TIME
VARCHAR
JSON
Contoh
Eksekusi pernyataan berikut untuk mengonversi nilai CHINA dari tipe VARCHAR ke tipe VARBINARY:
SELECT CAST(CAST('CHINA' AS VARBINARY) AS VARCHAR);Hasil berikut dikembalikan:
+--------------------------------------------------------+
| CAST(CAST('CHINA' AS VARBINARY) AS VARCHAR) |
+--------------------------------------------------------+
| CHINA |
+--------------------------------------------------------+CAST AS VARCHAR
CAST (expr AS VARCHAR)Deskripsi
Mengonversi nilai yang ditentukan oleh expr menjadi tipe VARCHAR.
Tipe data sumber
BOOLEAN
DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, atau TINYINT
BIGINT
DOUBLE
DATE, DATETIME, TIMESTAMP, atau TIME
VARBINARY
CatatanHanya kluster AnalyticDB for MySQL versi 3.1.4 atau lebih baru yang memungkinkan Anda mengonversi data dari tipe VARBINARY ke tipe VARCHAR menggunakan fungsi CAST.
MAP
JSON
Contoh
Eksekusi pernyataan berikut untuk mengonversi nilai 2001-1-22 00:00:00 dari tipe TIMESTAMP ke tipe VARCHAR:
SELECT CAST(TIMESTAMP '2001-1-22 00:00:00' AS VARCHAR);Hasil berikut dikembalikan:
+-------------------------------------------------+
| CAST(TIMESTAMP '2001-1-22 00:00:00' AS VARCHAR) |
+-------------------------------------------------+
| 2001-01-22 00:00:00 |
+-------------------------------------------------+CAST AS ARRAY
CAST (expr AS ARRAY<element_type>)Deskripsi
Mengonversi nilai yang ditentukan oleh expr menjadi array bertipe <element_type>.
Tipe data sumber
expr: VARCHAR atau JSON.<element_type>: TINYINT, SMALLINT, INT/INTEGER, atau FLOAT.
Aturan konversi
Jika nilai VARCHAR atau JSON sumber tidak sesuai dengan format ARRAY, kesalahan akan dikembalikan selama konversi.
Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai VARCHAR {}} menjadi array elemen bertipe FLOAT:
SELECT CAST('{}}' AS ARRAY<float>);Pesan kesalahan berikut dikembalikan karena nilai sumber tidak sesuai dengan format ARRAY:
ERROR 1815 (HY000): [30013, 2021091815372119216818804803453204662] : Value cannot be cast to array(real)Contoh
Eksekusi pernyataan berikut untuk mengonversi nilai JSON [1,2,3] menjadi array elemen bertipe INT:
SELECT CAST( JSON '[1,2,3]' AS ARRAY<int>);Hasil berikut dikembalikan:
+-------------------------------------+
| CAST( JSON '[1,2,3]' AS ARRAY<int> |
+-------------------------------------+
| [1,2,3] |
+-------------------------------------+CAST AS MAP
CAST (expr AS MAP<element_type_1,element_type_2>)Deskripsi
Mengonversi nilai yang ditentukan oleh expr menjadi peta yang memetakan tipe <element_type_1> ke tipe <element_type_2>.
Tipe data sumber
expr: VARCHAR.<element_type_1>: BOOLEAN, DECIMAL, DOUBLE, FLOAT, BIGINT, INT/INTEGER, SMALLINT, TINYINT, atau VARCHAR.<element_type_2>: BOOLEAN, DECIMAL, DOUBLE, FLOAT, BIGINT, INT/INTEGER, SMALLINT, TINYINT, VARCHAR, ARRAY, JSON, atau MAP.
Aturan konversi
Jika nilai VARCHAR sumber tidak sesuai dengan format MAP, kesalahan akan dikembalikan selama konversi.
Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai VARCHAR [a,b,c] menjadi tipe MAP:
SELECT CAST('[a,b,c]' AS MAP<varchar,varchar>);Pesan kesalahan berikut dikembalikan:
ERROR 1815 (HY000): [30013, 2021091815562519216818804803453207833] : Value cannot be cast to map(varchar,varchar)Contoh
Eksekusi pernyataan berikut untuk mengonversi nilai VARCHAR {"1":"a"} menjadi peta yang memetakan elemen VARCHAR ke tipe VARCHAR:
SELECT CAST('{"1":"a"}' AS MAP<varchar,varchar>);Hasil berikut dikembalikan:
+-------------------------------------------+
| CAST('{"1":"a"}' AS MAP<varchar,varchar>) |
+-------------------------------------------+
| {"1":"a"} |
+-------------------------------------------+CAST AS JSON
CAST (expr AS JSON)Deskripsi
Mengonversi nilai yang ditentukan oleh expr menjadi tipe JSON.
Tipe data sumber
BOOLEAN
DECIMAL(M,D), FLOAT, INT/INTEGER, SMALLINT, atau TINYINT
BIGINT
DOUBLE
VARCHAR
ARRAY
Aturan konversi
Jika nilai VARCHAR sumber tidak sesuai dengan format JSON, NULL akan dikembalikan setelah konversi.
Sebagai contoh, eksekusi pernyataan berikut untuk mengonversi nilai {}} dari tipe VARCHAR ke tipe JSON:
SELECT CAST('{}}' AS JSON);Hasil berikut dikembalikan:
NULLContoh
Eksekusi pernyataan berikut untuk mengonversi nilai
{}dari tipe VARCHAR ke tipe JSON:SELECT CAST('{}' AS JSON);Hasil berikut dikembalikan:
+--------------------+ | CAST('{}' AS JSON) | +--------------------+ | {} | +--------------------+Eksekusi pernyataan berikut untuk mengonversi nilai
0dari tipe BIGINT ke tipe JSON:SELECT CAST( BIGINT '0' AS JSON);Hasil berikut dikembalikan:
+---------------------------+ | CAST( BIGINT '0' AS JSON) | +---------------------------+ | 0 | +---------------------------+