All Products
Search
Document Center

MaxCompute:Konversi tipe data

Last Updated:Aug 25, 2026

MaxCompute SQL mendukung konversi antar berbagai tipe data, baik secara eksplisit maupun implisit.

Konversi eksplisit

Konversi eksplisit menggunakan fungsi CAST untuk mengubah nilai dari satu tipe data ke tipe data lain. Tabel berikut menunjukkan konversi eksplisit yang didukung oleh MaxCompute SQL. Untuk informasi lebih lanjut tentang fungsi ini, lihat CAST.

From/to

BIGINT

DOUBLE

STRING

DATETIME

BOOLEAN

DECIMAL

FLOAT

BIGINT

N/A

Y

Y

N

Y

Y

Y

DOUBLE

Y

N/A

Y

N

Y

Y

Y

STRING

Y

Y

N/A

Y

Y

Y

Y

DATETIME

N

N

Y

N/A

N

N

N

BOOLEAN

Y

Y

Y

N

N/A

Y

Y

DECIMAL

Y

Y

Y

N

Y

N/A

Y

FLOAT

Y

Y

Y

N

Y

Y

N/A

Pada tabel tersebut, Y menunjukkan bahwa konversi didukung, N menunjukkan bahwa konversi tidak didukung, dan N/A berarti konversi tidak diperlukan. Melakukan konversi eksplisit yang tidak didukung akan menghasilkan error.

  • data sampel

    Catatan

    Contoh berikut menggunakan tabel user dengan data sampel ini.

    create table if not exists user (
      user_name string,
    	user_id bigint,
    	age bigint   
    );
    insert into user values ('zhangsan',111,20);
  • Contoh

    SELECT CAST(user_id AS DOUBLE) AS new_id from user;
    SELECT CAST('2015-10-01 00:00:00' AS DATETIME) AS new_date;
    SELECT CAST(ARRAY(1,2,3) AS ARRAY<STRING>);
    SELECT CONCAT_WS(',', CAST(ARRAY(1, 2) AS ARRAY<STRING>));

Catatan penggunaan dan keterbatasan

  • Saat mengonversi tipe DOUBLE ke tipe BIGINT, bagian pecahan dipotong. Contohnya, CAST(1.6 AS BIGINT) = 1.

  • Saat mengonversi STRING dalam format DOUBLE ke BIGINT, nilai tersebut terlebih dahulu dikonversi ke DOUBLE lalu ke BIGINT, dengan bagian pecahan dipotong. Contohnya, CAST("1.6" AS BIGINT) = 1.

  • STRING dalam format BIGINT dapat dikonversi ke DOUBLE. Hasilnya memiliki satu tempat desimal. Contohnya, CAST("1" AS DOUBLE) = 1.0.

  • Konversi ke tipe DATETIME menggunakan format default yyyy-mm-dd hh:mi:ss.

  • Anda dapat menggunakan fungsi bawaan untuk mengonversi beberapa tipe data yang tidak mendukung konversi eksplisit langsung. Misalnya, gunakan fungsi TO_CHAR untuk mengonversi nilai BOOLEAN ke STRING. Untuk informasi lebih lanjut, lihat TO_CHAR. Fungsi TO_DATE juga mendukung konversi nilai STRING ke DATETIME. Untuk informasi lebih lanjut, lihat TO_DATE.

  • Jika rentang nilai DECIMAL dilampaui, CAST STRING TO DECIMAL dapat menyebabkan masalah seperti error overflow atau pemotongan data.

  • Mengonversi DECIMAL secara eksplisit ke DOUBLE atau FLOAT dapat mengakibatkan kehilangan presisi. Untuk skenario presisi tinggi, seperti perhitungan mata uang, disarankan menggunakan tipe DECIMAL.

  • MaxCompute mendukung konversi tipe untuk tipe data kompleks. Baik untuk konversi implisit maupun eksplisit pada tipe kompleks, subtipe-nya juga harus dapat dikonversi. Saat mengonversi STRUCT, nama bidang tidak harus sesuai, tetapi jumlah bidang harus sama dan bidang yang bersesuaian harus dapat dikonversi secara implisit atau eksplisit. Contohnya:

    • ARRAY<BIGINT> dapat dikonversi secara implisit atau eksplisit ke ARRAY<STRING>.

    • ARRAY<BIGINT> dapat dikonversi secara eksplisit ke ARRAY<INT> tetapi tidak dapat dikonversi secara implisit.

    • ARRAY<BIGINT> tidak dapat dikonversi secara implisit maupun eksplisit ke ARRAY<DATETIME>.

    • STRUCT<a:BIGINT,b:INT> dapat dikonversi secara implisit ke STRUCT<col1:STRING,col2:BIGINT> tetapi tidak dapat dikonversi secara implisit maupun eksplisit ke STRUCT<a:STRING>.

Konversi implisit dan cakupannya

Konversi implisit adalah konversi tipe yang dilakukan MaxCompute secara otomatis pada waktu proses berdasarkan konteks dan aturan konversi. Tabel berikut menunjukkan konversi implisit yang didukung oleh MaxCompute.

From/To

BOOLEAN

TINYINT

SMALLINT

INT

BIGINT

FLOAT

BOOLEAN

N/A

N

N

N

N

N

TINYINT

N

N/A

Y

Y

Y

Y

SMALLINT

N

N

N/A

Y

Y

Y

INT

N

N

Y

N/A

Y

Y

BIGINT

N

N

N

N

N/A

Y

FLOAT

N

N

N

N

Y

N/A

From/to

DOUBLE

DECIMAL

STRING

VARCHAR

TIMESTAMP

BINARY

DOUBLE

N/A

Y

Y

Y

N

N

DECIMAL

N

N/A

Y

Y

N

N

STRING

Y

Y

N/A

Y

N

N

VARCHAR

Y

Y

Y

N/A

N

N

TIMESTAMP

N

N

Y

Y

N/A

N

BINARY

N

N

N

N

N

N/A

Pada tabel-tabel tersebut, Y menunjukkan bahwa konversi didukung, N menunjukkan bahwa konversi tidak didukung, dan N/A berarti konversi tidak diperlukan. MaxCompute mengembalikan error untuk konversi implisit yang tidak didukung atau konversi yang gagal pada waktu proses.

Catatan
  • MaxCompute 2.0 memperkenalkan definisi konstanta untuk tipe DECIMAL dan DATETIME. Contohnya, 100BD adalah konstanta DECIMAL dengan nilai 100, dan 2017-11-11 00:00:00 adalah konstanta DATETIME. Anda dapat menggunakan konstanta ini langsung dalam klausa VALUES dan tabel.

  • Karena MaxCompute melakukan konversi implisit secara otomatis berdasarkan konteks, disarankan menggunakan CAST untuk konversi eksplisit ketika tipe data tidak sesuai.

  • Aturan konversi implisit hanya berlaku dalam cakupan tertentu. Dalam beberapa cakupan, hanya sebagian dari aturan ini yang berlaku.

Contoh

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

Aturan konversi implisit bervariasi tergantung pada operator:

  • Konversi implisit dengan operator relasional

    Operator relasional mencakup =, <>, <, <=, >, >=, IS NULL, IS NOT NULL, LIKE, RLIKE, dan IN. Aturan konversi implisit untuk LIKE, RLIKE, dan IN berbeda dari operator relasional lainnya dan dijelaskan secara terpisah. Aturan dalam bagian ini tidak berlaku untuk ketiga operator tersebut.

    Saat tipe data berbeda terlibat dalam operasi relasional, mereka dikonversi secara implisit sesuai aturan berikut.

    From/to

    BIGINT

    DOUBLE

    STRING

    DATETIME

    BOOLEAN

    DECIMAL

    BIGINT

    N/A

    DOUBLE

    DOUBLE

    N

    N

    DECIMAL

    DOUBLE

    DOUBLE

    N/A

    DOUBLE

    N

    N

    DECIMAL

    STRING

    DOUBLE

    DOUBLE

    N/A

    DATETIME

    N

    DECIMAL

    DATETIME

    N

    N

    DATETIME

    N/A

    N

    N

    BOOLEAN

    N

    N

    N

    N

    N/A

    N

    DECIMAL

    DECIMAL

    DECIMAL

    DECIMAL

    N

    N

    N/A

    Catatan
    • Jika dua tipe data yang dibandingkan tidak dapat dikonversi secara implisit, operasi relasional gagal dan mengembalikan error.

    • Untuk informasi lebih lanjut tentang operator relasional, lihat Operators.

  • Konversi implisit dengan operator relasional khusus

    Operator relasional khusus mencakup LIKE, RLIKE, dan IN.

    • Sintaks untuk LIKE dan RLIKE adalah sebagai berikut:

      source LIKE pattern;  
      source RLIKE pattern;
      Catatan
      • Parameter source dan pattern untuk LIKE dan RLIKE harus bertipe STRING.

      • Tipe data lain tidak diizinkan dan tidak dikonversi secara implisit ke STRING untuk operasi ini.

    • Sintaks untuk IN adalah sebagai berikut:

      key IN (value1, value2, …)
      Catatan
      • Dalam ekspresi IN, semua nilai dalam daftar nilai harus memiliki tipe data yang sama.

      • Saat key dibandingkan dengan nilai-nilai tersebut, jika tipe-tipe tersebut mencakup BIGINT, DOUBLE, dan STRING, disarankan mengonversi semuanya ke DOUBLE. Jika tipe-tipe tersebut mencakup DATETIME dan STRING, disarankan mengonversi semuanya ke DATETIME. Konversi tipe lain tidak diizinkan.

  • Konversi implisit dengan operator aritmetika

    Operator aritmetika mencakup +, -, *, /, dan %. Aturan konversi implisitnya adalah sebagai berikut:

    • Hanya tipe STRING, BIGINT, DOUBLE, dan DECIMAL yang dapat digunakan dalam operasi aritmetika.

    • Nilai STRING dikonversi secara implisit ke DOUBLE sebelum operasi.

    • BIGINT dikonversi secara implisit ke DOUBLE saat digunakan dalam perhitungan dengan DOUBLE.

    • Tipe DATETIME dan BOOLEAN tidak dapat digunakan dalam operasi aritmetika.

  • Konversi implisit dengan operator logika

    Operator logika mencakup and, or, dan not. Aturan konversi implisitnya adalah sebagai berikut:

    • Hanya nilai BOOLEAN yang dapat digunakan dalam operasi logika.

    • Tipe data lain tidak dapat digunakan dalam operasi logika dan tidak dapat dikonversi secara implisit untuk tujuan ini.

Konversi implisit dalam fungsi bawaan

MaxCompute SQL menyediakan berbagai fungsi bawaan untuk melakukan perhitungan pada satu atau beberapa kolom dari baris apa pun dan mengembalikan berbagai tipe data. Aturan konversi implisitnya adalah sebagai berikut:

  • Saat memanggil fungsi, jika tipe data parameter input tidak sesuai dengan tipe yang ditentukan untuk parameter tersebut, parameter tersebut dikonversi secara implisit ke tipe yang diperlukan.

  • Aturan konversi implisit bervariasi untuk setiap fungsi bawaan dalam MaxCompute SQL.

Konversi implisit dalam ekspresi CASE WHEN

Untuk informasi lebih lanjut tentang ekspresi CASE WHEN, lihat CASE WHEN expression. Aturan konversi implisitnya adalah sebagai berikut:

  • Jika tipe kembali hanya mencakup BIGINT dan DOUBLE, semuanya dikonversi ke DOUBLE.

  • Jika ada nilai kembali potensial yang bertipe STRING, semua nilai kembali dikonversi ke STRING. Jika suatu tipe, seperti BOOLEAN, tidak dapat dikonversi, error dikembalikan.

  • Konversi tipe lain tidak diizinkan.

Konversi STRING dan DATETIME

MaxCompute mendukung konversi antara tipe STRING dan DATETIME. Format yyyy-mm-dd hh:mi:ss digunakan untuk konversi ini.

Unit

Format string

Value range

Year

yyyy

0001-9999

Month

mm

01-12

Day

dd

01-28|29|30|31

Hour

hh

00-23

Minute

mi

00-59

Second

ss

00-59

Catatan
  • Jika nilai unit berupa digit tunggal, nol di depan tidak boleh dihilangkan. Contohnya, 2014-1-9 12:12:12 adalah format DATETIME yang tidak valid dan tidak dapat dikonversi dari STRING ke DATETIME. Anda harus menulisnya sebagai 2014-01-09 12:12:12.

  • STRING dapat dikonversi ke DATETIME hanya jika string tersebut sesuai dengan format yang dijelaskan di atas. Contohnya, CAST("2013-12-31 02:34:34" AS DATETIME) mengonversi STRING 2013-12-31 02:34:34 ke tipe DATETIME. Demikian pula, saat nilai DATETIME dikonversi ke STRING, format default-nya adalah yyyy-mm-dd hh:mi:ss.

MaxCompute menyediakan fungsi TO_DATE, yang memungkinkan Anda mengonversi nilai STRING yang tidak sesuai dengan format tanggal default ke tipe DATETIME. Untuk informasi lebih lanjut, lihat TO_DATE.