全部产品
Search
文档中心

MaxCompute:Konversi Tipe

更新时间:Jul 06, 2025

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

Konversi Eksplisit

Konversi eksplisit menggunakan fungsi CAST untuk mengubah tipe data suatu nilai. Tabel berikut menjelaskan aturan konversi eksplisit yang didukung oleh MaxCompute SQL. Untuk informasi lebih lanjut tentang fungsi CAST, lihat CAST.

Dari/Ke

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

Y menunjukkan bahwa konversi didukung. N menunjukkan bahwa konversi tidak didukung. N/A menunjukkan bahwa konversi tidak diperlukan. Jika dilakukan konversi eksplisit yang tidak didukung, kesalahan akan dikembalikan.

  • Contoh

    Catatan

    Data dalam tabel user digunakan dalam topik ini.

    create table if not exists user (
      user_name string,
    	user_id bigint,
    	age bigint   
    );
    insert into user values ('zhangsan',111,20);
  • Kode 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>));

Petunjuk dan Batasan

  • Jika nilai tipe DOUBLE dikonversi menjadi tipe BIGINT, digit setelah titik desimal dihapus. Sebagai contoh, Anda dapat menjalankan CAST(1.6 AS BIGINT) = 1 untuk mengonversi 1.6 dari tipe DOUBLE menjadi 1 dari tipe BIGINT.

  • Jika nilai tipe STRING yang sesuai dengan format tipe DOUBLE dikonversi menjadi tipe BIGINT, nilai tersebut dikonversi dari tipe STRING ke tipe DOUBLE, lalu ke tipe BIGINT. Selama konversi, digit setelah titik desimal dihapus. Sebagai contoh, Anda dapat menjalankan CAST("1.6" AS BIGINT) = 1 untuk mengonversi 1.6 dari tipe STRING menjadi 1 dari tipe BIGINT.

  • Jika nilai tipe STRING yang sesuai dengan format tipe BIGINT dikonversi menjadi tipe DOUBLE, satu digit dipertahankan setelah titik desimal. Sebagai contoh, Anda dapat menjalankan CAST("1" AS DOUBLE) = 1.0 untuk mengonversi 1 dari tipe STRING menjadi 1.0 dari tipe DOUBLE.

  • Format default yyyy-mm-dd hh:mi:ss digunakan selama konversi yang melibatkan tipe DATETIME.

  • Tipe data tertentu tidak dapat dikonversi secara eksplisit, tetapi dapat dikonversi menggunakan fungsi bawaan SQL. Sebagai contoh, Anda dapat menggunakan fungsi TO_CHAR untuk mengonversi tipe BOOLEAN menjadi tipe STRING. Untuk informasi lebih lanjut, lihat TO_CHAR. Anda juga dapat menggunakan fungsi TO_DATE untuk mengonversi tipe STRING menjadi tipe DATETIME. Untuk informasi lebih lanjut, lihat TO_DATE.

  • Jika nilai melebihi rentang nilai tipe DECIMAL, kesalahan mungkin terjadi selama eksekusi CAST STRING TO DECIMAL. Sebagai contoh, overflow pada bit paling signifikan atau penghapusan bit paling tidak signifikan mungkin terjadi.

  • Konversi dari tipe DECIMAL ke tipe DOUBLE atau FLOAT mengakibatkan hilangnya presisi. Dalam skenario yang memerlukan presisi tinggi, seperti perhitungan jumlah tagihan atau laju premi, disarankan untuk mempertahankan tipe DECIMAL.

  • MaxCompute mendukung konversi tipe data kompleks. Konversi implisit antara tipe data kompleks hanya dapat diimplementasikan jika subtipe mereka mendukung konversi implisit. Konversi eksplisit antara tipe data kompleks hanya dapat diimplementasikan jika subtipe mereka mendukung konversi eksplisit. Jika Anda mengonversi tipe STRUCT, nama bidang dapat tidak konsisten, tetapi jumlah bidang harus konsisten dan bidang-bidang ini harus mendukung konversi implisit atau eksplisit. Contoh:

    • MaxCompute dapat mengonversi secara implisit atau eksplisit nilai tipe BIGINT menjadi nilai tipe STRING.

    • MaxCompute dapat mengonversi secara eksplisit nilai tipe BIGINT menjadi nilai tipe INT. Konversi implisit tidak didukung.

    • MaxCompute tidak dapat mengonversi secara implisit atau eksplisit nilai tipe BIGINT menjadi nilai tipe DATETIME.

    • MaxCompute dapat mengonversi nilai STRUCT<a:BIGINT,b:INT> menjadi nilai STRUCT<col1:STRING,col2:BIGINT> secara implisit. Namun, MaxCompute tidak mendukung konversi, baik implisit maupun eksplisit, dari nilai STRUCT<a:BIGINT,b:INT> menjadi nilai STRUCT<a:STRING>.

Konversi Implisit dan Ruang Lingkup Aplikasinya

Konversi implisit memungkinkan MaxCompute untuk secara otomatis mengonversi tipe data berdasarkan konteks dan aturan yang telah ditentukan. Tabel berikut menjelaskan aturan konversi implisit yang didukung oleh MaxCompute.

Dari/Ke

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

Dari/Ke

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/A

N/A

TIMESTAMP

N

N

Y

Y

N/A

N

BINARY

N

N

N

N

N

N/A

Y menunjukkan bahwa konversi didukung. N menunjukkan bahwa konversi tidak didukung. N/A menunjukkan bahwa konversi tidak diperlukan. Kesalahan akan dikembalikan jika konversi implisit yang tidak didukung dilakukan atau jika konversi gagal.

Catatan
  • MaxCompute V2.0 memperkenalkan metode untuk mendefinisikan konstanta tipe DECIMAL dan DATETIME. Sebagai contoh, 100BD menunjukkan nilai 100 dari tipe DECIMAL. 2017-11-11 00:00:00 menunjukkan konstanta tipe DATETIME. Konstanta dapat langsung didefinisikan dalam klausa VALUES dan tabel.

  • Jika konversi implisit digunakan, MaxCompute secara otomatis mengonversi tipe data berdasarkan konteks. Jika tipe tidak cocok, Anda dapat menggunakan fungsi CAST untuk secara eksplisit mengonversi tipe data.

  • Aturan konversi implisit berlaku untuk ruang lingkup tertentu. Dalam skenario tertentu, hanya sebagian aturan yang berlaku.

Contoh

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

Konversi implisit dengan operator yang berbeda:

  • Konversi implisit dengan operator relasional

    Operator relasional meliputi =, <>, <, ≤, >, ≥, IS NULL, IS NOT NULL, LIKE, RLIKE, dan IN. Aturan yang menggunakan LIKE, RLIKE, dan IN berbeda dari aturan yang menggunakan operator relasional lainnya. Aturan yang dijelaskan dalam bagian ini tidak berlaku untuk ketiga operator tersebut.

    Tabel berikut menjelaskan aturan konversi implisit saat data dari tipe yang berbeda digunakan untuk operasi relasional.

    Dari/Ke

    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 nilai yang ingin Anda bandingkan tidak mendukung konversi implisit, operasi relasional tidak dapat diselesaikan dan kesalahan akan dikembalikan.

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

  • Konversi implisit dengan operator relasional khusus

    Operator relasional khusus meliputi LIKE, RLIKE, dan IN.

    • Sintaksis LIKE dan RLIKE

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

      • Tipe lain tidak dapat terlibat dalam operasi atau secara implisit dikonversi menjadi tipe STRING.

    • Sintaksis IN

      key IN (value1, value2, ...)
      Catatan
      • Tipe data dalam daftar nilai setelah IN harus konsisten.

      • Jika tipe data nilai mencakup BIGINT, DOUBLE, dan STRING, konversikan nilai tipe BIGINT dan STRING menjadi tipe DOUBLE. Jika tipe data nilai mencakup DATETIME dan STRING, konversikan nilai tipe STRING menjadi tipe DATETIME. Konversi antara tipe data lainnya tidak diperbolehkan.

  • Konversi implisit dengan operator aritmatika

    Operator aritmatika meliputi: +, -, *, /, dan %. Aturan berikut berlaku untuk konversi implisit dengan operator-operator ini.

    • Hanya nilai tipe STRING, BIGINT, DOUBLE, dan DECIMAL yang dapat digunakan untuk operasi aritmatika.

    • Nilai tipe STRING secara implisit dikonversi menjadi tipe DOUBLE sebelum operasi aritmatika.

    • Jika nilai tipe BIGINT dan DOUBLE digunakan untuk operasi aritmatika, nilai tipe BIGINT secara implisit dikonversi menjadi tipe DOUBLE.

    • Nilai tipe DATETIME dan BOOLEAN tidak dapat digunakan untuk operasi aritmatika.

  • Konversi implisit dengan operator logika

    Operator logika meliputi AND, OR, dan NOT. Aturan berikut berlaku untuk konversi implisit dengan operator-operator ini:

    • Hanya nilai tipe BOOLEAN yang dapat digunakan untuk operasi logika.

    • Nilai tipe lain tidak dapat digunakan untuk operasi logika atau dikonversi secara implisit.

Konversi Implisit dengan Fungsi Bawaan

MaxCompute SQL menyediakan berbagai fungsi bawaan. Fungsi-fungsi ini dapat digunakan untuk menghitung satu atau beberapa kolom baris tertentu dan memberikan data dari tipe tertentu. Aturan berikut berlaku untuk konversi implisit dengan fungsi-fungsi ini:

  • Jika Anda memanggil fungsi bawaan dan tipe data parameter input berbeda dari yang didefinisikan dalam fungsi, tipe data parameter input dikonversi menjadi tipe data yang didefinisikan oleh fungsi.

  • Parameter setiap fungsi bawaan di MaxCompute SQL memiliki persyaratan berbeda untuk konversi implisit.

Konversi Implisit dengan CASE WHEN

Untuk informasi lebih lanjut tentang CASE WHEN, lihat Ekspresi CASE WHEN. Aturan berikut berlaku untuk konversi implisit dengan CASE WHEN:

  • Jika nilai pengembalian adalah tipe BIGINT dan DOUBLE, semua nilai dikonversi menjadi tipe DOUBLE.

  • Jika nilai pengembalian mencakup tipe STRING, semua nilai dikonversi menjadi tipe STRING. Jika konversi, seperti konversi dari BOOLEAN ke STRING gagal, kesalahan akan dikembalikan.

  • Konversi antara tipe data lainnya tidak diperbolehkan.

Konversi antara Tipe STRING dan DATETIME

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

Unit waktu

String (tidak peka huruf besar-kecil)

Nilai valid

Tahun

yyyy

0001 - 9999

Bulan

mm

01 - 12

Hari

dd

01 - 28|29|30|31

Jam

hh

00 - 23

Menit

mi

00 - 59

Detik

ss

00 - 59

Catatan
  • Jika digit pertama rentang nilai setiap unit waktu adalah 0, 0 tidak boleh dihilangkan. Sebagai contoh, 2014-1-9 12:12:12 adalah format DATETIME yang tidak valid dan tidak dapat dikonversi dari tipe STRING menjadi tipe DATETIME. Harus ditulis sebagai 2014-01-09 12:12:12.

  • Hanya tipe STRING yang memenuhi persyaratan format di atas yang dapat dikonversi menjadi tipe DATETIME. Sebagai contoh, CAST("2013-12-31 02:34:34" AS DATETIME) mengonversi 2013-12-31 02:34:34 dari tipe STRING menjadi tipe DATETIME. Demikian pula, jika Anda mengonversi nilai tipe DATETIME menjadi nilai tipe STRING, nilai setelah konversi secara otomatis direpresentasikan dalam format yyyy-mm-dd hh:mi:ss.

MaxCompute menyediakan fungsi TO_DATE untuk mengonversi tipe STRING yang tidak sesuai dengan format tipe DATETIME menjadi tipe DATETIME. Untuk informasi lebih lanjut, lihat TO_DATE.