All Products
Search
Document Center

MaxCompute:Konversi tipe

Last Updated:Mar 26, 2026

MaxCompute SQL mendukung dua bentuk konversi tipe: konversi eksplisit menggunakan fungsi CAST dan konversi implisit, di mana MaxCompute secara otomatis mengonversi tipe berdasarkan konteks.

Konversi eksplisit

Fungsi CAST mengonversi nilai dari satu tipe data ke tipe data lainnya. Untuk detail sintaksis, lihat CAST.

Tabel berikut menunjukkan konversi eksplisit yang didukung. Y = didukung, N = tidak didukung, N/A = tidak berlaku.

Dari\KeBIGINTDOUBLESTRINGDATETIMEBOOLEANDECIMALFLOAT
BIGINTN/AYYNYYY
DOUBLEYN/AYNYYY
STRINGYYN/AYYYY
DATETIMENNYN/ANNN
BOOLEANYYYNN/AYY
DECIMALYYYNYN/AY
FLOATYYYNYYN/A

Upaya melakukan konversi yang tidak didukung akan menghasilkan error.

Perilaku dan batasan konversi

Konversi numerik

KonversiPerilakuContoh
DOUBLE → BIGINTBagian desimal dipotong, bukan dibulatkanCAST(1.6 AS BIGINT)1
STRING (format DOUBLE) → BIGINTSTRING dikonversi → DOUBLE → BIGINT; bagian desimal dipotongCAST('1.6' AS BIGINT)1
STRING (format BIGINT) → DOUBLESatu tempat desimal ditambahkanCAST('1' AS DOUBLE)1.0

Konversi DATETIME

Konversi yang melibatkan DATETIME menggunakan format yyyy-mm-dd hh:mi:ss. Angka nol di depan wajib digunakan: 2014-01-09 12:12:12 valid; 2014-1-9 12:12:12 tidak valid.

Konversi DECIMAL

  • Mengonversi STRING ke DECIMAL menghasilkan error jika nilainya melebihi rentang DECIMAL—misalnya, jika digit paling signifikan overflow atau digit paling tidak signifikan terpotong.

  • Mengonversi DECIMAL ke DOUBLE atau FLOAT menyebabkan kehilangan presisi. Untuk perhitungan finansial seperti Tagihan atau laju premi, pertahankan nilai dalam DECIMAL.

Konversi yang tidak didukung oleh CAST

Beberapa pasangan tipe tidak dapat dikonversi dengan CAST, tetapi dapat ditangani dengan fungsi bawaan:

KonversiFungsi alternatif
BOOLEAN → STRINGTO_CHAR
STRING (format non-standar) → DATETIMETO_DATE

Konversi tipe kompleks

Konversi antar tipe kompleks (ARRAY, STRUCT) mengikuti aturan konversi tipe elemen atau bidangnya:

  • Konversi implisit antar tipe kompleks hanya didukung jika subtipe-nya mendukung konversi implisit.

  • Konversi eksplisit antar tipe kompleks hanya didukung jika subtipe-nya mendukung konversi eksplisit.

  • Untuk tipe STRUCT, nama bidang boleh berbeda, tetapi jumlah bidang harus sama dan setiap pasangan bidang harus mendukung konversi yang diperlukan.

KonversiImplisitEksplisit
BIGINT → STRINGYY
BIGINT → INTNY
BIGINT → DATETIMENN
STRUCT<a:BIGINT, b:INT>STRUCT<col1:STRING, col2:BIGINT>YY
STRUCT<a:BIGINT, b:INT>STRUCT<col1:STRING> (jumlah bidang tidak sesuai)NN

Contoh

Catatan

Contoh berikut menggunakan tabel user. Untuk membuat tabel dan memasukkan data sampel, jalankan:

CREATE TABLE IF NOT EXISTS user (
  user_name STRING,
  user_id   BIGINT,
  age       BIGINT
);
INSERT INTO user VALUES ('zhangsan', 111, 20);
-- Mengonversi kolom BIGINT ke DOUBLE
SELECT CAST(user_id AS DOUBLE) AS new_id FROM user;

-- Mengonversi literal string ke DATETIME
SELECT CAST('2015-10-01 00:00:00' AS DATETIME) AS new_date;

-- Mengonversi array integer ke array string
SELECT CAST(ARRAY(1, 2, 3) AS ARRAY<STRING>);

-- Menggabungkan array string menjadi string yang dipisahkan koma
SELECT CONCAT_WS(',', CAST(ARRAY(1, 2) AS ARRAY<STRING>));

Konversi implisit

MaxCompute secara otomatis mengonversi tipe data berdasarkan konteks. Tabel berikut menunjukkan konversi implisit yang didukung. Y = didukung, N = tidak didukung, N/A = tidak berlaku.

Tipe integer dan floating-point

Dari\KeBOOLEANTINYINTSMALLINTINTBIGINTFLOAT
BOOLEANYNNNNN
TINYINTNYYYYY
SMALLINTNNYYYY
INTNNYYYY
BIGINTNNNNYY
FLOATNNNNYY

Tipe decimal dan string

Dari\KeDOUBLEDECIMALSTRINGVARCHARTIMESTAMPBINARY
DOUBLEYYYYNN
DECIMALNYYYNN
STRINGYYYYNN
VARCHARYYNNN/AN/A
TIMESTAMPNNYYYN
BINARYNNNNNY

Upaya melakukan konversi implisit yang tidak didukung atau konversi yang gagal saat waktu proses akan menghasilkan error.

Catatan
  • MaxCompute 2.0 memperkenalkan konstanta bertipe untuk DECIMAL dan DATETIME. Misalnya, 100BD adalah konstanta DECIMAL dengan nilai 100, dan 2017-11-11 00:00:00 adalah konstanta DATETIME. Konstanta ini dapat digunakan langsung dalam klausa VALUES dan tabel.

  • Saat tipe tidak cocok dalam suatu ekspresi, gunakan CAST untuk mengonversi secara eksplisit daripada mengandalkan konversi implisit.

  • Aturan konversi implisit berlaku pada konteks tertentu. Dalam beberapa situasi, hanya sebagian aturan yang berlaku.

Contoh

SELECT user_id + age + '12345', CONCAT(user_name, user_id, age) FROM user;

Dalam kueri ini, '12345' dikonversi secara implisit ke DOUBLE untuk ekspresi aritmetika, sedangkan user_id dan age dikonversi secara implisit ke STRING untuk CONCAT.

Konversi implisit dengan operator relasional

Operator relasional mencakup =, <>, <, <=, >, >=, IS NULL, dan IS NOT NULL. Tabel berikut menunjukkan cara MaxCompute menyelesaikan ketidaksesuaian tipe dalam perbandingan relasional. Nilai sel menunjukkan tipe yang digunakan untuk mengonversi kedua operan.

Dari\KeBIGINTDOUBLESTRINGDATETIMEBOOLEANDECIMAL
BIGINTN/ADOUBLEDOUBLENNDECIMAL
DOUBLEDOUBLEN/ADOUBLENNDECIMAL
STRINGDOUBLEDOUBLEN/ADATETIMENDECIMAL
DATETIMENNDATETIMEN/ANN
BOOLEANNNNNN/AN
DECIMALDECIMALDECIMALDECIMALNNN/A

Jika kedua operan tidak mendukung konversi implisit, perbandingan akan gagal dengan error. Untuk informasi lebih lanjut tentang operator relasional, lihat Operators.

Konversi implisit dengan LIKE, RLIKE, dan IN

LIKE, RLIKE, dan IN mengikuti aturan yang berbeda dari operator relasional lainnya.

LIKE dan RLIKE

source LIKE pattern;
source RLIKE pattern;

Baik source maupun pattern harus bertipe STRING. Tipe lain tidak dapat digunakan dan tidak dikonversi secara implisit ke STRING.

IN

key IN (value1, value2, ...)

Semua nilai dalam daftar harus memiliki tipe yang sama. Saat daftar berisi tipe campuran, MaxCompute menerapkan konversi berikut:

  • Jika daftar berisi nilai BIGINT, DOUBLE, dan STRING, maka BIGINT dan STRING dikonversi ke DOUBLE.

  • Jika daftar berisi nilai DATETIME dan STRING, maka STRING dikonversi ke DATETIME.

  • Kombinasi tipe lain tidak didukung.

Konversi implisit dengan operator aritmetika

Operator aritmetika mencakup +, -, *, /, dan %.

  • Hanya nilai BIGINT, DOUBLE, DECIMAL, dan STRING yang dapat digunakan dalam ekspresi aritmetika.

  • STRING dikonversi secara implisit ke DOUBLE sebelum operasi dilakukan.

  • Saat BIGINT dan DOUBLE muncul dalam ekspresi yang sama, BIGINT dikonversi ke DOUBLE.

  • DATETIME dan BOOLEAN tidak dapat digunakan dalam ekspresi aritmetika.

Konversi implisit dengan operator logika

Operator logika mencakup AND, OR, dan NOT. Hanya nilai BOOLEAN yang dapat digunakan dalam ekspresi logika. Tipe lain tidak dikonversi secara implisit.

Konversi implisit dengan fungsi bawaan

Saat fungsi bawaan menerima argumen yang tipenya berbeda dari tipe parameter yang diharapkan, MaxCompute secara implisit mengonversi argumen tersebut ke tipe yang diharapkan. Setiap fungsi bawaan menentukan sendiri persyaratan konversi implisitnya.

Konversi implisit dengan CASE WHEN

Untuk informasi lebih lanjut tentang CASE WHEN, lihat CASE WHEN expression.

Saat cabang THEN dan ELSE mengembalikan tipe yang berbeda, MaxCompute menyelesaikannya sebagai berikut:

  • BIGINT dan DOUBLE → semua cabang dikonversi ke DOUBLE.

  • Salah satu cabang mengembalikan STRING → semua cabang dikonversi ke STRING. Jika suatu cabang tidak dapat dikonversi (misalnya, BOOLEAN ke STRING), error akan dikembalikan.

  • Kombinasi tipe lain tidak didukung.

Konversi antara STRING dan DATETIME

Konversi antara STRING dan DATETIME menggunakan format yyyy-mm-dd hh:mi:ss. Rentang valid untuk setiap komponen adalah:

KomponenFormatRentang valid
Tahunyyyy0001–9999
Bulanmm01–12
Haridd01–28/29/30/31
Jamhh00–23
Menitmi00–59
Keduass00–59

Angka nol di depan wajib digunakan. Misalnya, 2014-1-9 12:12:12 tidak valid; tulis sebagai 2014-01-09 12:12:12.

-- Valid: mengonversi string ke DATETIME
SELECT CAST('2013-12-31 02:34:34' AS DATETIME);

-- Mengonversi DATETIME ke STRING menghasilkan format yyyy-mm-dd hh:mi:ss secara otomatis

Untuk mengonversi STRING yang tidak mengikuti format ini, gunakan TO_DATE.

Upaya konversi seperti berikut akan gagal dan menyebabkan exception.

CAST("2013/12/31 02/34/34" AS DATETIME)  
CAST("20131231023434" AS DATETIME)  
CAST("2013-12-31 2:34:34" AS DATETIME)

Nilai maksimum untuk komponen hari bergantung pada jumlah hari aktual dalam bulan yang ditentukan. Jika nilainya melebihi jumlah hari dalam bulan tersebut, exception akan terjadi.

CAST("2013-02-29 12:12:12" AS DATETIME)      -- Exception dikembalikan. Februari 2013 tidak memiliki 29 hari.
CAST("2013-11-31 12:12:12" AS DATETIME)      -- Exception dikembalikan. November 2013 tidak memiliki 31 hari.