Fungsi CAST MaxCompute mengonversi hasil ekspresi ke tipe data target. Topik ini menjelaskan format perintah, parameter, dan contoh penggunaan fungsi CAST.
Format perintah
cast(<expr> as <type>)Deskripsi parameter
expr: Wajib diisi. Data sumber yang akan dikonversi.
type: Wajib diisi. Tipe data target. Penggunaannya sebagai berikut:
cast(double as bigint): Mengonversi nilai DOUBLE ke nilai BIGINT.cast(string as bigint): Mengonversi string ke nilai BIGINT. Jika string merepresentasikan bilangan bulat, konversi dilakukan secara langsung. Jika string merepresentasikan bilangan titik mengambang atau angka dalam notasi ilmiah, string tersebut terlebih dahulu dikonversi ke tipe DOUBLE, lalu ke tipe BIGINT.cast(string as datetime)ataucast(datetime as string): Menggunakan format tanggal defaultyyyy-mm-dd hh:mi:ss.Konversi antara tipe data dasar dan tipe JSON.
Fungsi CAST juga mendukung konversi antara tipe JSON dan tipe data dasar, termasuk JSON, STRING, BIGINT, INT, TINYINT, SMALLINT, DOUBLE, FLOAT, BOOLEAN, dan
SQL-TYPE. Berikut adalah contoh perintahnya:cast(json as string): Mengonversi ekspresi JSON ke tipe STRING. Ekspresi JSON tidak boleh berupa ARRAY atau OBJECT.cast(string as json): Mengonversi nilai STRING ke ekspresi JSON bertipe STRING. Ini berbeda dengan `json_parse` dan `json_format`. `json_parse` mengonversi string JSON yang valid menjadi nilai JSON, yang dapat berupa JSON OBJECT. Sebaliknya, `cast(string as json)` mengonversi string apa pun menjadi string JSON.cast(null as json): Mengonversi nilai NULL ke tipe JSON.cast(json 'null' as ...): `json 'null'` dan `null` dikonversi menjadi `null` SQL.
Deskripsi nilai kembalian
Mengembalikan nilai dengan tipe data target.
Jika Anda menjalankan
setproject odps.function.strictmode=false, fungsi mengembalikan angka yang muncul sebelum huruf apa pun.Jika Anda menjalankan
setproject odps.function.strictmode=true, kesalahan akan dikembalikan.Saat Anda mengonversi nilai ke tipe Decimal:
Jika Anda mengatur
odps.sql.decimal.tostring.trimzero=true, angka nol di akhir setelah koma desimal dihapus.Jika Anda mengatur
odps.sql.decimal.tostring.trimzero=false, angka nol di akhir setelah koma desimal dipertahankan.PentingParameter
odps.sql.decimal.tostring.trimzeromemengaruhi baik data yang diambil dari tabel maupun nilai statis.
Contoh penggunaan
Contoh 1: Penggunaan umum.
--Mengembalikan 1. select cast('1' as bigint);Contoh 2: Mengonversi nilai STRING ke nilai BOOLEAN. Jika STRING kosong,
falsedikembalikan. Jika tidak,truedikembalikan.STRING kosong.
select cast("" as boolean); --Mengembalikan +------+ | _c0 | +------+ | false | +------+STRING tidak kosong.
select cast("false" as boolean); --Mengembalikan true +------+ | _c0 | +------+ | true | +------+
Contoh 3: Mengonversi string ke tanggal.
--Mengonversi string ke tanggal. select cast("2022-12-20" as date); --Mengembalikan +------------+ | _c0 | +------------+ | 2022-12-20 | +------------+ --Mengonversi string tanggal yang memiliki bagian waktu ke tanggal. select cast("2022-12-20 00:01:01" as date); --Mengembalikan +------------+ | _c0 | +------------+ | NULL | +------------+ --Untuk memastikan nilai ditampilkan dengan benar, atur parameter berikut: set odps.sql.executionengine.enable.string.to.date.full.format= true; select cast("2022-12-20 00:01:01" as date); --Mengembalikan +------------+ | _c0 | +------------+ | 2022-12-20 | +------------+CatatanSecara default, parameter
odps.sql.executionengine.enable.string.to.date.full.formatbernilaifalse. Untuk mengonversi string tanggal yang mencakup bagian waktu, atur parameter ini ketrue.Contoh 4 (Contoh perintah salah): Penggunaan tidak valid. Pengecualian dilemparkan jika konversi gagal atau tidak didukung. Perintah berikut merupakan contoh penggunaan salah.
select cast('abc' as bigint);Contoh 5: Contoh skenario ketika
setproject odps.function.strictmode=falsediatur.setproject odps.function.strictmode=false; select cast('123abc' as bigint); --Mengembalikan +------------+ | _c0 | +------------+ | 123 | +------------+Contoh 6: Contoh skenario ketika
setproject odps.function.strictmode=truediatur.setproject odps.function.strictmode=true; select cast('123abc' as bigint); --Mengembalikan FAILED:ODPS-0130071:[0,0]Semantic analysis exception - physical plan generation failed: java.lang.NumberFormatException: ODPS-0123091: Illegal type cast - In function cast, value '123abc' cannot be casted from String to Bigint.Contoh 7: Contoh skenario ketika
odps.sql.decimal.tostring.trimzerodiatur.--Membuat tabel. create table mf_dot (dcm1 decimal(38,18), dcm2 decimal(38,18)); --Memasukkan data. insert into table mf_dot values (12.45500BD,12.3400BD); --Ketika flag bernilai true atau tidak diatur. set odps.sql.decimal.tostring.trimzero=true; --Menghapus angka nol di akhir setelah koma desimal. select cast(round(dcm1,3) as string), cast(round(dcm2,3) as string) from mf_dot; --Nilai kembalian +------------+------------+ | _c0 | _c1 | +------------+------------+ | 12.455 | 12.34 | +------------+------------+ --Ketika flag bernilai false. set odps.sql.decimal.tostring.trimzero=false; --Mempertahankan angka nol di akhir setelah koma desimal. select cast(round(dcm1,3) as string), cast(round(dcm2,3) as string) from mf_dot; --Nilai kembalian +------------+------------+ | _c0 | _c1 | +------------+------------+ | 12.455 | 12.340 | +------------+------------+ --Parameter ini juga berlaku untuk nilai statis. set odps.sql.decimal.tostring.trimzero=false; select cast(round(12345.120BD,3) as string); --Mengembalikan: +------------+ | _c0 | +------------+ | 12345.120 | +------------+
Contoh 8: Konversi antara tipe STRING dan JSON.
--Mengonversi JSON ke string. select cast(json '123' as string); --Mengembalikan: +-----+ | _c0 | +-----+ | 123 | +-----+ --Mengonversi JSON ke string. select cast(json '"abc"' as string); --Mengembalikan: +-----+ | _c0 | +-----+ | abc | +-----+ --Mengonversi JSON ke string. select cast(json 'true' as string); --Mengembalikan: +-----+ | _c0 | +-----+ | TRUE | +-----+ --Mengonversi JSON ke string. select cast(json 'null' as string); --Mengembalikan: +-----+ | _c0 | +-----+ | NULL | +-----+ --Mengonversi string ke JSON. select cast('{"a":2}' as json); --Mengembalikan: +-----+ | _c0 | +-----+ | "{\"a\":2}" | +-----+ --Contoh salah mengonversi JSON ke string. Mengonversi ekspresi JSON bertipe ARRAY atau OBJECT ke string tidak didukung. select cast(json '{"a":2}' as string); --Kesalahan dikembalikan: FAILED: ODPS-0123091: Illegal type cast - Unsupported cast from json array/object to stringContoh 9: Konversi antara tipe NUMBER dan JSON.
--Mengonversi JSON ke bigint. select cast(json '123' as bigint); --Mengembalikan: +------------+ | _c0 | +------------+ | 123 | +------------+ --Mengonversi JSON ke float. select cast(json '"1.23"' as float); --Mengembalikan: +------+ | _c0 | +------+ | 1.23 | +------+ --Mengonversi JSON ke double. select cast(json '1.23' as double); --Mengembalikan: +------------+ | _c0 | +------------+ | 1.23 | +------------+ --Mengonversi int ke JSON. select cast(123 as json); --Mengembalikan: +-----+ | _c0 | +-----+ | 123 | +-----+ --Mengonversi float ke JSON. select cast(1.23 as json); --Mengembalikan: +-----+ | _c0 | +-----+ | 1.23 | +-----+Contoh 10: Konversi antara tipe BOOLEAN dan JSON.
--Mengonversi boolean ke JSON. select cast(true as json); --Mengembalikan: +-----+ | _c0 | +-----+ | true | +-----+ --Mengonversi JSON ke boolean. select cast(json 'false' as boolean); --Mengembalikan: +------+ | _c0 | +------+ | false | +------+ --Mengonversi JSON ke boolean. select cast(json '"abc"' as boolean); --Mengembalikan: +------+ | _c0 | +------+ | true | +------+ --ARRAY atau OBJECT tidak dapat dikonversi ke boolean. select cast(json '[1,2]' as boolean); --Kesalahan dikembalikan: Unsupported cast from json array/object to booleanContoh 11: Konversi antara NULL dan tipe JSON.
--Mengonversi null ke JSON. select json_type(cast(null as json)); --Mengembalikan: +-----+ | _c0 | +-----+ | NULL | +-----+
Fungsi terkait
Fungsi CAST merupakan fungsi tipe kompleks. Untuk informasi selengkapnya tentang fungsi yang memproses tipe data kompleks seperti ARRAY, MAP, STRUCT, dan JSON, lihat Fungsi tipe kompleks.
Fungsi CAST juga diklasifikasikan sebagai jenis fungsi lainnya. Untuk informasi selengkapnya tentang fungsi untuk skenario bisnis lainnya, lihat Fungsi lainnya.