全部产品
Search
文档中心

MaxCompute:CAST

更新时间:Jul 02, 2025

Fungsi CAST dari MaxCompute digunakan untuk mengonversi tipe data. Fungsi ini mengubah tipe data sumber yang ditentukan oleh parameter expr menjadi tipe data yang ditentukan oleh parameter type. Topik ini menjelaskan sintaksis, parameter, dan contoh penggunaan fungsi CAST.

Sintaksis

cast(<expr> as <type>)

Parameter

expr: Wajib. Data sumber yang tipe datanya ingin dikonversi.

type: Wajib. Tipe data tujuan konversi. Penggunaan:

  • cast(double as bigint): Mengonversi nilai tipe DOUBLE menjadi tipe BIGINT.

  • cast(string as bigint): Mengonversi nilai tipe STRING menjadi tipe BIGINT. Jika string berisi angka dalam format INTEGER, string tersebut dikonversi menjadi BIGINT. Jika string berisi angka dalam format FLOAT atau EKSPONENSIAL, string tersebut dikonversi menjadi DOUBLE terlebih dahulu sebelum menjadi BIGINT.

  • Format tanggal default yyyy-mm-dd hh:mi:ss digunakan untuk cast(string as datetime) dan cast(datetime as string).

  • Konversi antara tipe data dasar dan tipe JSON:

    Fungsi CAST juga dapat mengonversi nilai antara tipe JSON dan tipe dasar berikut: STRING, BIGINT, INT, TINYINT, SMALLINT, DOUBLE, FLOAT, BOOLEAN, and SQL-TYPE. Penggunaan:

    • cast(json as string): Mengonversi ekspresi JSON menjadi nilai tipe STRING. Ekspresi JSON tidak boleh bertipe ARRAY atau OBJECT.

    • cast(string as json): Mengonversi nilai tipe STRING menjadi ekspresi JSON. Ekspresi JSON bertipe STRING. Perhatikan bahwa fungsi CAST berbeda dari fungsi JSON_PARSE dan JSON_FORMAT. Anda dapat menggunakan fungsi JSON_PARSE untuk mengonversi string JSON valid menjadi objek JSON. Sementara itu, fungsi CAST hanya mengonversi string menjadi string JSON yang berisi nilai tipe STRING.

    • cast(null as json): Mengonversi nilai null menjadi nilai 'null' JSON.

    • cast(json 'null' as ...): Mengonversi nilai 'null' JSON dan nilai null umum menjadi nilai null SQL.

Nilai kembali

  • Nilai dengan tipe data yang ditentukan dikembalikan.

  • Jika Anda menentukan setproject odps.function.strictmode=false, angka sebelum huruf dikembalikan.

  • Jika Anda menentukan setproject odps.function.strictmode=true, kesalahan akan dikembalikan.

  • Jika Anda mengonversi nilai menjadi tipe DECIMAL:

    • Jika Anda mengatur parameter odps.sql.decimal.tostring.trimzero menjadi true, desimal dengan angka nol di akhir akan dihapus.

    • Jika Anda mengatur odps.sql.decimal.tostring.trimzero menjadi false, desimal dengan angka nol di akhir tetap dipertahankan.

      Penting

      Parameter odps.sql.decimal.tostring.trimzero hanya berlaku saat membaca data dari tabel. Parameter ini tidak berlaku pada nilai statis.

Contoh

  • Contoh 1: Penggunaan umum. Contoh pernyataan:

    -- Nilai kembali adalah 1.
    select cast('1' as bigint);
  • Contoh 2: Mengonversi nilai tipe STRING menjadi tipe BOOLEAN. Jika nilai tipe STRING adalah string kosong, false dikembalikan. Sebaliknya, true dikembalikan. Contoh pernyataan:

    • Nilai tipe STRING adalah string kosong.

      select cast("" as boolean);
      -- Nilai kembali adalah false.
      +------+
      | _c0  |
      +------+
      | false |
      +------+
    • Nilai tipe STRING adalah string tidak kosong.

      select cast("false" as boolean);
      -- Nilai kembali adalah true.
      +------+
      | _c0  |
      +------+
      | true |
      +------+
  • Contoh 3: Mengonversi string menjadi tanggal.

    -- Mengonversi string menjadi tanggal.
    select cast("2022-12-20" as date);
    -- Hasil berikut dikembalikan:
    +------------+
    | _c0        |
    +------------+
    | 2022-12-20 |
    +------------+
    
    -- Mengonversi string tanggal yang berisi bagian jam, menit, dan detik menjadi tanggal.
    select cast("2022-12-20 00:01:01" as date);
    -- Hasil berikut dikembalikan:
    +------------+
    | _c0        |
    +------------+
    | NULL       |
    +------------+
    -- Untuk memastikan tanggal yang valid dikembalikan, jalankan perintah berikut:
    set odps.sql.executionengine.enable.string.to.date.full.format= true;
    select cast("2022-12-20 00:01:01" as date);
    -- Hasil berikut dikembalikan:
    +------------+
    | _c0        |
    +------------+
    | 2022-12-20 |
    +------------+
    Catatan

    Secara default, parameter odps.sql.executionengine.enable.string.to.date.full.format disetel ke false. Jika Anda ingin mengonversi string tanggal yang berisi bagian jam, menit, dan detik, Anda harus menyetel parameter ini ke true.

  • Contoh 4: (Penggunaan salah) Jika konversi tipe gagal atau tidak didukung, kesalahan akan dikembalikan. Contoh pernyataan salah:

    select cast('abc' as bigint);
  • Contoh 5: setproject odps.function.strictmode=false ditentukan.

    setprojectodps.function.strictmode=false;
    select cast('123abc'as bigint);
    -- Hasil berikut dikembalikan:
    +------------+
    |_c0|
    +------------+
    |123|
    +------------+
  • Contoh 6: setproject odps.function.strictmode=true ditentukan.

    setprojectodps.function.strictmode=true;
    select cast('123abc' as bigint);
    -- Hasil berikut dikembalikan:
    FAILED:ODPS-0130071:[0,0]Semanticanalysisexception-physicalplangenerationfailed:java.lang.NumberFormatException:ODPS-0123091:Illegaltypecast-Infunctioncast,value'123abc'cannotbecastedfromStringtoBigint.
  • Contoh 7: Parameter odps.sql.decimal.tostring.trimzero ditentukan.

    -- Buat tabel.
    create table mf_dot (dcm1 decimal(38,18),
                         dcm2 decimal(38,18));
    -- Masukkan data ke dalam tabel.
    insert into table mf_dot values (12.45500BD,12.3400BD);
    
    -- Setel parameter odps.sql.decimal.tostring.trimzero ke true, atau jangan konfigurasikan parameter odps.sql.decimal.tostring.trimzero.
    set odps.sql.decimal.tostring.trimzero=true;
    -- Hapus angka 0 di akhir desimal.
    select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot;
    -- Hasil berikut dikembalikan:
    +------------+------------+
    | _c0        | _c1        |
    +------------+------------+
    | 12.455     | 12.34      |
    +------------+------------+
    
    -- Setel parameter odps.sql.decimal.tostring.trimzero ke false.
    set odps.sql.decimal.tostring.trimzero=false;
    -- Pertahankan angka 0 di akhir desimal.
    select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot;
    -- Hasil berikut dikembalikan:
    +------------+------------+
    | _c0        | _c1        |
    +------------+------------+
    | 12.455     | 12.340     |
    +------------+------------+
    
    -- Parameter odps.sql.decimal.tostring.trimzero tidak berlaku untuk nilai statis.
    set odps.sql.decimal.tostring.trimzero=false;
    select cast(round(12345.120BD,3) as string);
    -- Hasil berikut dikembalikan:
    +------------+
    | _c0        |
    +------------+
    | 12345.12   |
    +------------+
  • Contoh 8: Mengonversi nilai antara tipe STRING dan tipe JSON.

    -- Mengonversi angka JSON menjadi nilai tipe STRING.
    select cast(json '123' as string);
    -- Hasil berikut dikembalikan:
    +-----+
    | _c0 |
    +-----+
    | 123 |
    +-----+
    
    -- Mengonversi string JSON menjadi nilai tipe STRING.
    select cast(json '"abc"' as string);
    -- Hasil berikut dikembalikan:
    +-----+
    | _c0 |
    +-----+
    | abc |
    +-----+
    
    -- Mengonversi boolean JSON menjadi nilai tipe STRING.
    select cast(json 'true' as string); 
    -- Hasil berikut dikembalikan:
    +-----+
    | _c0 |
    +-----+
    | TRUE |
    +-----+
    
    -- Mengonversi JSON 'null' menjadi nilai null tipe STRING.
    select cast(json 'null' as string);
    -- Hasil berikut dikembalikan:
    +-----+
    | _c0 |
    +-----+
    | NULL |
    +-----+
    
    -- Mengonversi string menjadi nilai tipe JSON.
    select cast('{"a":2}' as json); 
    -- Hasil berikut dikembalikan:
    +-----+
    | _c0 |
    +-----+
    | "{\"a\":2}" |
    +-----+
    
    
    -- Contoh pernyataan salah. Mengonversi ekspresi JSON tipe ARRAY atau OBJECT menjadi nilai tipe STRING.
    select cast(json '{"a":2}' as string);
    -- Kesalahan dikembalikan.
    FAILED: ODPS-0123091:Illegal type cast - Unsupported cast from json array/object to string
  • Contoh 9: Mengonversi nilai antara tipe NUMBER dan tipe JSON.

    -- Mengonversi angka JSON menjadi nilai tipe BIGINT.
    select cast(json '123' as bigint);
    -- Hasil berikut dikembalikan:
    +------------+
    | _c0        |
    +------------+
    | 123        |
    +------------+
    
    -- Mengonversi angka JSON menjadi nilai tipe FLOAT.
    select cast(json '"1.23"' as float);
    -- Hasil berikut dikembalikan:
    +------+
    | _c0  |
    +------+
    | 1.23 |
    +------+
    
    -- Mengonversi angka JSON menjadi nilai tipe DOUBLE.
    select cast(json '1.23' as double);
    -- Hasil berikut dikembalikan:
    +------------+
    | _c0        |
    +------------+
    | 1.23       |
    +------------+
    
    -- Mengonversi nilai tipe INT menjadi angka JSON.
    select cast(123 as json);
    -- Hasil berikut dikembalikan:
    +-----+
    | _c0 |
    +-----+
    | 123 |
    +-----+
    
    -- Mengonversi nilai tipe FLOAT menjadi angka JSON.
    select cast(1.23 as json);
    -- Hasil berikut dikembalikan:
    +-----+
    | _c0 |
    +-----+
    | 1.23 |
    +-----+
  • Contoh 10: Mengonversi nilai antara tipe BOOLEAN dan tipe JSON.

    -- Mengonversi nilai tipe BOOLEAN menjadi tipe BIGINT.
    select cast(true as json);
    -- Hasil berikut dikembalikan:
    +-----+
    | _c0 |
    +-----+
    | true |
    +-----+
    
    -- Mengonversi boolean JSON menjadi nilai tipe BOOLEAN.
    select cast(json 'false' as boolean);
    -- Hasil berikut dikembalikan:
    +------+
    | _c0  |
    +------+
    | false |
    +------+
    
    -- Mengonversi string JSON menjadi nilai tipe BOOLEAN.
    select cast(json '"abc"' as boolean);
    -- Hasil berikut dikembalikan:
    +------+
    | _c0  |
    +------+
    | true |
    +------+
    
    -- Mengonversi array JSON atau objek JSON menjadi tipe BOOLEAN.
    select cast(json '[1,2]' as boolean);
    -- Kesalahan dikembalikan.
    Unsupported cast from json array/object to boolean
  • Contoh 11: Mengonversi antara nilai null dan nilai tipe JSON.

    -- Mengonversi nilai null menjadi nilai tipe STRING.
    select json_type(cast(null as json));
    -- Hasil berikut dikembalikan:
    +-----+
    | _c0 |
    +-----+
    | NULL |
    +-----+

Fungsi terkait

CAST adalah fungsi tipe kompleks. Untuk informasi lebih lanjut tentang fungsi yang digunakan untuk memproses data tipe kompleks seperti ARRAY, MAP, STRUCT, dan JSON, lihat Fungsi Tipe Kompleks.

CAST juga diklasifikasikan sebagai fungsi yang digunakan dalam skenario bisnis lainnya. Untuk informasi lebih lanjut tentang fungsi yang digunakan dalam skenario bisnis lainnya, lihat Fungsi Lainnya.