cast fungsi

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime

Transmisikan nilai expr ke jenis data target type. Operator ini adalah sinonim untuk :: operator (tanda titik dua koma)

Sintaks

cast(sourceExpr AS targetType)

Argumen

  • sourceExpr: Ekspresi apa pun yang dapat ditransmisikan.
  • targetType: Jenis data hasil.

Pengembalian

Hasilnya adalah jenis targetType.

Kombinasi pemetaan tipe data berikut ini valid:

Sumber (baris) Target (kolom) KOSONG numerik string TANGGAL TIMESTAMP TIMESTAMP_NTZ interval bulan tahunan interval waktu sehari BOOLEAN BINER ARRAY PETA STRUKTUR VARIAN OBJEK
KOSONG Ya Ya Ya Ya Ya Ya Ya Ya Ya Ya Ya Ya Ya Ya N
numerik N Ya Ya N Ya N Ya Ya Ya N N N N Ya N
string N Ya Ya Ya Ya Ya Ya Ya Ya Ya N N N Ya N
TANGGAL N N Ya Ya Ya Ya N N N N N N N Ya N
TIMESTAMP N Ya Ya Ya Ya Ya N N N N N N N Ya N
TIMESTAMP_NTZ N N Ya Ya Ya Ya N N N N N N N Ya N
interval bulan tahunan N Ya Ya N N N Ya N N N N N N N N
interval waktu sehari N Ya Ya N N N N Ya N N N N N N N
BOOLEAN N Ya Ya N Ya N N N Ya N N N N Ya N
BINER N Ya Ya N N N N N N Ya N N N Ya N
ARRAY N N Ya N N N N N N N Ya N N Ya N
PETA N N Ya N N N N N N N N Ya N N N
STRUKTUR N N Ya N N N N N N N N N Ya N N
VARIAN N Ya Ya Ya Ya Ya N N Ya Ya Ya Ya Ya Ya N
OBJEK N N N N N N N N N N N Ya Ya N N

Kondisi kesalahan umum

Aturan dan batasan berdasarkan jenis target

Peringatan

Dalam Databricks Runtime, jika spark.sql.ansi.enabled adalah false, luapan tidak akan menyebabkan kesalahan tetapi sebaliknya akan "membungkus" hasilnya.

Nilai sourceExpr dengan format yang tidak valid atau karakter yang tidak valid untuk targetType akan menghasilkan NULL.

numerik

Jika targetType adalah numerik dan sourceExpr berjenis:

  • KOSONG

    Hasilnya adalah NULL dari jenis numerik yang ditentukan.

  • numerik

    Jika targetType merupakan numerik integral, hasilnya dipotong sourceExpr menjadi bilangan bulat.

    Jika tidak, hasilnya sourceExprdibulatkan agar sesuai dengan skala yang tersedia dari targetType.

    Jika nilai berada di luar rentang targetType, Azure Databricks menaikkan CAST_OVERFLOW.

    Gunakan try_cast untuk mengubah kesalahan luapan menjadi NULL.

  • String

    sourceExprdibaca sebagai nilai harfiah dari targetType.

    Jika sourceExpr tidak mematuhi format untuk nilai harfiah, Azure Databricks menaikkan CAST_INVALID_INPUT.

    Jika nilai berada di luar rentang targetType, Azure Databricks menaikkan CAST_OVERFLOW.

    Gunakan try_cast untuk mengubah kesalahan overflow dan format tidak valid menjadi NULL.

  • Timestamp

    Hasilnya adalah jumlah detik yang berlalu antara 1970-01-01 00:00:00 UTC dan sourceExpr.

    Jika targetType merupakan angka integral, hasilnya dipotong menjadi bilangan bulat.

    Jika tidak, hasilnya dibulatkan agar sesuai dengan skala targetType yang tersedia.

    Jika hasilnya berada di luar rentang targetType, Azure Databricks menaikkan CAST_OVERFLOW.

    Gunakan try_cast untuk mengubah kesalahan luapan menjadi NULL.

  • INTERVAL

    Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime 11.3 LTS ke atas

    Jenis target harus berupa numerik yang tepat.

    Mengingat INTERVAL upper_unit TO lower_unit hasilnya diukur dalam jumlah total lower_unit. Jika lower_unit adalah SECOND, pecahan detik disimpan di sisi kanan koma desimal. Untuk semua interval lainnya, hasilnya selalu berupa angka integral.

  • BOOLEAN

    Jika sourceExpr adalah:

    • true: Hasilnya adalah 1.
    • false: Hasilnya adalah 0.
    • NULL: Hasilnya adalah NULL.
  • VARIAN

    Aturan mengenai jenis nilai aktual dari jenis VARIANT berlaku.

Contoh

> SELECT cast(NULL AS INT);
  NULL

> SELECT cast(5.6 AS INT);
  5

> SELECT cast(5.6 AS DECIMAL(2, 0));
  6

> SELECT cast(-5.6 AS INT);
  -5

> SELECT cast(-5.6 AS DECIMAL(2, 0));
  -6

> SELECT cast(128 AS TINYINT);
  Error: CAST_OVERFLOW

> SELECT cast(128 AS DECIMAL(2, 0));
  Error: CAST_OVERFLOW

> SELECT cast('123' AS INT);
  123

> SELECT cast('123.0' AS INT);
  Error: CAST_INVALID_INPUT

> SELECT cast(TIMESTAMP'1970-01-01 00:00:01' AS LONG);
  1

> SELECT cast(TIMESTAMP'1970-01-01 00:00:00.000001' AS DOUBLE);
  1.0E-6

> SELECT cast(TIMESTAMP'2022-02-01 00:00:00' AS SMALLINT);
  Error: CAST_OVERFLOW
> SELECT cast(true AS BOOLEAN);
  1

> SELECT cast(INTERVAL '1-2' YEAR TO MONTH AS INTEGER);
  14

> SELECT cast(INTERVAL '1:30.5' MINUTE TO SECOND AS DECIMAL(5, 2));
  90.50

> SELECT cast(TRUE AS INT);
  1

> SELECT cast(FALSE AS INT);
  0

> SELECT cast('15'::VARIANT AS INT);
  15

TALI

Jika sourceExpr adalah STRINGSTRING yang dihasilkan mewarisi kolase sourceExpr. Dalam semua kasus lain, kolatasi STRING yang dihasilkan adalah kolatasi default .

Untuk mengubah pengurutan, tambahkan ekspresi susun.

Jika targetType adalah jenis STRING dan sourceExpr berjenis:

  • KOSONG

    Hasilnya adalah NULL string.

  • numerik presisi

    Hasilnya adalah angka harfiah dengan tanda minus opsional dan tidak ada nol di depan kecuali satu digit di sebelah kiri titik desimal. Jika targetType adalah DECIMAL(p, s) dengan s lebih besar dari 0, titik desimal ditambahkan dan angka nol di belakang ditambahkan hingga mencapai skala.

  • bilangan biner titik-mengambang

    Jika bilangan mutlak kurang dari 10,000,000 dan lebih besar atau sama dengan 0.001, hasilnya dinyatakan tanpa notasi ilmiah dengan setidaknya satu digit di kedua sisi koma desimal.

    Jika tidak, Azure Databricks menggunakan mantissa diikuti oleh E dan eksponen. Mantissa memiliki tanda minus opsional diikuti oleh satu digit di sebelah kiri titik desimal, dan bilangan digit minimal lebih dari nol di sebelah kanan. Eksponen memiliki tanda minus di awal yang bersifat opsional.

  • TANGGAL

    Jika tahun antara 9999 BCE dan 9999 CE, hasilnya adalah dateString masing-masing dalam bentuk -YYYY-MM-DD dan YYYY-MM-DD.

    Untuk tahun sebelum atau setelah rentang ini, jumlah digit yang diperlukan ditambahkan ke komponen tahun dan + digunakan untuk CE.

  • Timestamp

    Jika tahun antara 9999 BCE dan 9999 CE, hasilnya adalah timestampString masing-masing dalam bentuk -YYYY-MM-DD hh:mm:ss dan YYYY-MM-DD hh:mm:ss.

    Untuk tahun sebelum atau setelah rentang ini, jumlah digit yang diperlukan ditambahkan ke komponen tahun dan + digunakan untuk CE.

    Pecahan detik .f... ditambahkan jika perlu.

  • TIMESTAMP_NTZ

    Jika tahun antara 9999 BCE dan 9999 CE, hasilnya adalah timestampString masing-masing dalam bentuk -YYYY-MM-DD hh:mm:ss dan YYYY-MM-DD hh:mm:ss.

    Untuk tahun sebelum atau setelah rentang ini, jumlah digit yang diperlukan ditambahkan ke komponen tahun dan + digunakan untuk CE.

    Pecahan detik .f... ditambahkan jika perlu.

  • interval bulan tahunan

    Hasilnya adalah representasi terpendek dari interval harfiah. Jika intervalnya negatif, tandanya disematkan di interval-string. Untuk unit yang lebih kecil dari 10, nol di depan dihilangkan.

    String interval tahun-bulan umumnya berbentuk:

    • INTERVAL 'Y' YEAR
    • INTERVAL 'Y-M' YEAR TO MONTH
    • INTERVAL 'M' MONTH
  • interval waktu sehari

    Hasilnya adalah representasi terpendek dari interval harfiah. Jika intervalnya negatif, tandanya disematkan di interval-string. Untuk unit yang lebih kecil dari 10, nol di depan dihilangkan.

    String interval waktu hari biasa memiliki bentuk:

    • INTERVAL 'D' DAY
    • INTERVAL 'D h' DAY TO HOUR
    • INTERVAL 'D h:m' DAY TO MINUTE
    • INTERVAL 'D h:m:s' DAY TO SECOND
    • INTERVAL 'h' HOUR
    • INTERVAL 'h:m' HOUR TO MINUTE
    • INTERVAL 'm:s' MINUTE TO SECOND
    • INTERVAL 's' SECOND
  • BOOLEAN

    Hasil dari true boolean adalah harfiah STRINGtrue. Untuk false itu adalah STRING literal false. Untuk NULL itu adalah string NULL.

  • BINER

    Hasilnya adalah biner sourceExpr yang ditafsirkan sebagai urutan karakter UTF-8.

    Azure Databricks tidak memvalidasi karakter UTF-8. Pengecoran dari BINARY ke STRING tidak akan pernah menyisipkan karakter pengganti atau menghasilkan error.

  • ARRAY

    Hasilnya adalah daftar elemen pemeran yang dipisahkan oleh koma dan dikurung dengan kurung siku [ ]. Satu spasi mengikuti setiap koma. NULL Elemen diterjemahkan menjadi harfiah null.

    Azure Databricks tidak mengutip atau menandai elemen individual, yang mungkin berisi tanda kurung atau koma.

  • PETA

    Hasilnya adalah daftar pasangan nilai kunci yang dipisahkan koma, yang dikurung dengan kurung kurawal { }. Satu spasi mengikuti setiap koma. Setiap pasangan nilai kunci dipisahkan oleh ->. NULLNilai peta diterjemahkan menjadi harfiah null.

    Azure Databricks tidak mengutip atau menandai kunci atau nilai individual, yang mungkin berisi kurung kurawal, koma, atau ->.

  • STRUKTUR

    Hasilnya adalah daftar nilai-nilai bidang cast yang dipisahkan koma, dan dikelilingi oleh kurung kurawal { }. Satu spasi mengikuti setiap koma. Nilai bidang NULL diterjemahkan menjadi harfiah null.

    Azure Databricks tidak mengutip atau menandai nilai bidang individual, yang mungkin berisi kurung kurawal, atau koma.

  • VARIAN

    Aturan mengenai jenis nilai aktual dari jenis VARIANT berlaku.

Contoh

> SELECT cast(NULL AS STRING);
  NULL

> SELECT cast(-3Y AS STRING);
  -3

> SELECT cast(5::DECIMAL(10, 5) AS STRING);
  5.00000

> SELECT cast(12345678e-4 AS STRING);
  1234.5678

> SELECT cast(1e7 as string);
  1.0E7

> SELECT cast(1e6 as string);
  1000000.0

> SELECT cast(1e-4 as string);
  1.0E-4

> SELECT cast(1e-3 as string);
  0.001

> SELECT cast(12345678e7 AS STRING);
  1.2345678E14

> SELECT cast(DATE'1900-12-31' AS STRING);
  1900-12-31

-- Caesar no more
> SELECT cast(DATE'-0044-03-15' AS STRING);
  -0044-03-15

> SELECT cast(DATE'100000-12-31' AS STRING);
  +100000-12-31

> SELECT cast(current_timestamp() AS STRING);
  2022-04-02 22:29:09.783

> SELECT cast(TIMESTAMP_NTZ'2023-01-01' AS STRING);
  2023-01-01 00:00:00

> SELECT cast(INTERVAL -'13-02' YEAR TO MONTH AS STRING);
  INTERVAL '-13-2' YEAR TO MONTH

> SELECT cast(INTERVAL '12:04.9900' MINUTE TO SECOND AS STRING);
  INTERVAL '12:04.99' MINUTE TO SECOND

> SELECT cast(true AS STRING);
  true

> SELECT cast(false AS STRING);
  false

-- A bad UTF-8 string
> SELECT cast(x'33800033' AS STRING);
  3�3

> SELECT hex(cast(x'33800033' AS STRING));
  33800033

> SELECT cast(array('hello', NULL, 'world') AS STRING);
  [hello, null, world]

> SELECT cast(array('hello', 'wor, ld') AS STRING);
  [hello, wor, ld]

> SELECT cast(array() AS STRING);
  []

> SELECT cast(map('hello', 1, 'world', null) AS STRING);
  {hello -> 1, world -> null}

> SELECT cast(map('hello -> 1', DATE'2022-01-01') AS STRING);
  {hello -> 1 -> 2022-01-01}

> SELECT cast(map() AS STRING);
  {}

> SELECT cast(named_struct('a', 5, 'b', 6, 'c', NULL) AS STRING);
  {5, 6, null}

> SELECT cast(named_struct() AS STRING);
  {}

> SELECT cast(DATE'2024-01-05'::VARIANT AS STRING);
  2024-01-05

> SELECT cast(5 AS STRING) COLLATE UNICODE;
  5

TANGGAL

Jika targetType adalah jenis DATE dan sourceExpr berjenis:

  • KOSONG

    Hasilnya adalah NULLDATE.

  • String

    sourceExpr harus berupa dateString yang valid.

    Jika sourceExpr bukan dateString yang valid, Azure Databricks menaikkan CAST_INVALID_INPUT.

    Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi NULL.

  • Timestamp

    Hasilnya adalah bagian tanggal dari stempel waktu sourceExpr.

  • TIMESTAMP_NTZ

    Hasilnya adalah bagian tanggal dari timestamp_ntz sourceExpr.

  • VARIAN

    Berlaku aturan jenis untuk nilai aktual yang dimiliki oleh VARIANT jenis data.

Contoh

> SELECT cast(NULL AS DATE);
  NULL

> SELECT cast('1900-10-01' AS DATE);
  1900-10-01

> SELECT cast('1900-10-01' AS DATE);
  1900-10-01

-- There is no February 30.
> SELECT cast('1900-02-30' AS DATE);
  Error: CAST_INVALID_INPUT

> SELECT cast(TIMESTAMP'1900-10-01 12:13:14' AS DATE);
  1900-10-01

> SELECT cast(TIMESTAMP_NTZ'1900-10-01 12:13:14' AS DATE);
  1900-10-01

> SELECT cast(TIMESTAMP_NTZ'1900-10-01 12:13:14'::VARIANT AS DATE);
  1900-10-01

TANDA WAKTU

Jika targetType adalah jenis TIMESTAMP dan sourceExpr berjenis:

  • KOSONG

    Hasilnya adalah NULLDATE.

  • numerik

    sourceExprdibaca sebagai jumlah detik sejak 1970-01-01 00:00:00 UTC.

    Pecahan yang lebih kecil dari mikrodetik akan terpotong.

    Jika nilai berada di luar rentang TIMESTAMP, Azure Databricks menaikkan CAST_OVERFLOW.

    Gunakan try_cast untuk mengubah kesalahan luapan menjadi NULL.

  • String

    sourceExpr harus berupa timestampString yang valid.

    Jika sourceExpr bukan timestampString yang valid, Azure Databricks menaikkan CAST_INVALID_INPUT.

    Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi NULL.

  • TANGGAL

    Hasilnya adalah sourceExprDATE pada pukul 00:00:00.

  • TIMESTAMP_NTZ

Hasilnya adalah nilai tanda waktu dengan bidang tahun/bulan/hari/jam/menit/detik yang sama dari timestamp_ntz sourceExpr.

  • VARIAN

    Berlaku aturan jenis untuk nilai aktual yang dimiliki oleh VARIANT jenis data.

Contoh

> SELECT cast(NULL AS TIMESTAMP);
  NULL

> SET TIME ZONE '+00:00';
> SELECT cast(0.0 AS TIMESTAMP);
  1970-01-01 00:00:00

> SELECT cast(0.0000009 AS TIMESTAMP);
  1970-01-01 00:00:00

> SELECT cast(1e20 AS TIMESTAMP);
  Error: CAST_OVERFLOW

> SELECT cast('1900' AS TIMESTAMP);
  1900-01-01 00:00:00

> SELECT cast('1900-10-01 12:13:14' AS TIMESTAMP);
  1900-10-01 12:13:14

> SELECT cast('1900-02-30 12:13:14' AS TIMESTAMP);
  Error: CAST_INVALID_INPUT

> SELECT cast(DATE'1900-10-01' AS TIMESTAMP);
  1900-10-01 00:00:00

> SELECT cast(TIMESTAMP_NTZ'2023-01-01 02:03:04.567' as TIMESTAMP)
  2023-01-01 02:03:04.567

> SELECT cast(DATE'1900-10-01'::VARIANT AS TIMESTAMP);
  1900-10-01 00:00:00

TIMESTAMP_NTZ

Jika targetType adalah jenis TIMESTAMP_NTZ dan sourceExpr berjenis:

  • KOSONG

    Hasilnya adalah NULLDATE.

  • String

    sourceExpr harus berupa timestampString yang valid.

    Jika sourceExpr bukan timestampString yang valid, Azure Databricks menaikkan CAST_INVALID_INPUT.

    Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi NULL.

  • TANGGAL

    Hasilnya adalah sourceExpr TANGGAL pada 00:00:00 jam.

  • Timestamp

    Hasilnya adalah waktu lokal di sourceExpr zona waktu sesi.

  • VARIAN

    Berlaku aturan jenis untuk nilai aktual yang dimiliki oleh VARIANT jenis data.

Contoh

> SELECT cast(NULL AS TIMESTAMP_NTZ);
  NULL

> SELECT cast('1900' AS TIMESTAMP_NTZ);
  1900-01-01 00:00:00

> SELECT cast('1900-10-01 12:13:14' AS TIMESTAMP_NTZ);
  1900-10-01 12:13:14

> SELECT cast('1900-02-30 12:13:14' AS TIMESTAMP_NTZ);
  Error: CAST_INVALID_INPUT

> SELECT cast(DATE'1900-10-01' AS TIMESTAMP_NTZ);
  1900-10-01 00:00:00

> SELECT current_timezone(), CAST(TIMESTAMP'2021-7-1T8:43:28' as TIMESTAMP_NTZ);
  America/Los_Angeles 2021-07-01 08:43:28

> SELECT current_timezone(), CAST(TIMESTAMP'2021-7-1T8:43:28UTC+3' as TIMESTAMP_NTZ);
  America/Los_Angeles 2021-06-30 22:43:28

> SELECT cast(DATE'1900-10-01'::VARIANT AS TIMESTAMP_NTZ);
  1900-10-01 00:00:00

interval tahun-bulan

Jika targetType adalah interval bulan tahun dan sourceExpr berjenis:

Contoh

> SELECT cast(NULL AS INTERVAL YEAR);
  NULL

> SELECT cast('1-4' AS INTERVAL YEAR TO MONTH)::STRING;
  INTERVAL '1-4' YEAR TO MONTH

> SELECT cast('1' AS INTERVAL YEAR TO MONTH);
  Error: CAST_INVALID_INPUT

> SELECT cast(INTERVAL '1-4' YEAR TO MONTH AS INTERVAL MONTH)::STRING;
  INTERVAL '16' MONTH

> SELECT cast(14 AS INTERVAL YEAR TO MONTH)::STRING;
  INTERVAL '1-2' YEAR TO MONTH

> SELECT cast(INTERVAL '1-11' YEAR TO MONTH AS INTERVAL YEAR)::STRING;
  INTERVAL '1' YEAR

interval waktu siang

Jika targetType adalah interval waktu hari dan sourceExpr berjenis:

> SELECT cast(NULL AS INTERVAL HOUR);
  NULL

> SELECT cast('1 4:23' AS INTERVAL DAY TO MINUTE)::STRING;
  INTERVAL '1 04:23' DAY TO MINUTE

> SELECT cast('1' AS INTERVAL DAY TO MINUTE);
  Error: CAST_INVALID_INPUT

> SELECT cast(INTERVAL '1 4:23' DAY TO MINUTE AS INTERVAL MINUTE)::STRING;
  INTERVAL '1703' MINUTE

> SELECT cast(INTERVAL '1 4:23' DAY TO MINUTE AS INTERVAL HOUR)::STRING;
  INTERVAL '28' HOUR

> SELECT cast(125.3 AS INTERVAL MINUTE TO SECOND)::STRING;
  INTERVAL '2:5.3' MINUTE TO SECOND

Boolean

Jika targetType adalah BOOLEAN dan sourceExpr berjenis:

  • KOSONG

    Hasilnya adalah NULL dari jenis BOOLEAN.

  • numerik

    Jika sourceExpr adalah:

    • 0: Hasilnya adalah false.

      Jika tidak, hasilnya adalah true.

  • String

    Jika sourcEexpr adalah (tidak peka huruf besar/kecil):

    • 'T', 'TRUE', 'Y', 'YES', or '1': Hasilnya adalah true
    • 'F', 'FALSE', 'N', 'NO', or '0': Hasilnya adalah false
    • NULL: Hasilnya adalah NULL

    Jika tidak, Azure Databricks menaikkan CAST_INVALID_INPUT.

    Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi NULL.

  • VARIAN

    Aturan mengenai jenis nilai aktual dari jenis VARIANT berlaku.

Contoh

> SELECT cast(NULL AS BOOLEAN);
  NULL

> SELECT cast('T' AS BOOLEAN);
  true

> SELECT cast('True' AS BOOLEAN);
  true

> SELECT cast('1' AS BOOLEAN);
  true

> SELECT cast('0' AS BOOLEAN);
  false

> SELECT cast('n' AS BOOLEAN);
  false

> SELECT cast('on' AS BOOLEAN);
  Error: CAST_INVALID_INPUT

> SELECT cast(0 AS BOOLEAN);
  false

> SELECT cast(0.0E10 AS BOOLEAN);
  false

> SELECT cast(1 AS BOOLEAN);
  true

> SELECT cast(0.1 AS BOOLEAN);
  true

> SELECT cast('NaN'::FLOAT AS BOOLEAN);
  true

> SELECT cast(1::VARIANT AS BOOLEAN);
  true

BINER

Jika targetType adalah BINARY dan sourceExpr berjenis:

  • KOSONG

    Hasilnya adalah NULL dari jenis BINARY.

  • String

    Hasilnya adalah pengkodean UTF-8 dari surceExpr.

  • VARIAN

    Berlaku aturan jenis untuk nilai aktual yang dimiliki oleh VARIANT jenis data.

Contoh

> SELECT cast(NULL AS BINARY);
  NULL

> SELECT hex(cast('Spark SQL' AS BINARY));
  537061726B2053514C

> SELECT hex(cast('Oдesa' AS BINARY));
  4FD0B4657361

> SELECT hex(cast('Oдesa'::VARIANT AS BINARY));
  4FD0B4657361

ARRAY

Jika targetType adalah ARRAY < targetElementType > dan sourceExpr berjenis:

  • KOSONG

    Hasilnya adalah NULL dari targeType.

  • ARRAY < sourceElementType >

    Jika transmisi dari sourceElementType ke targetElementType didukung, hasilnya adalah ARRAY<targetElementType> dengan semua elemen ditransmisikan ke targetElementType.

    Azure Databricks menimbulkan kesalahan jika pemeran tidak didukung atau jika salah satu elemen tidak dapat ditransmisikan.

    Gunakan try_cast untuk mengubah data tidak valid atau kesalahan luapan menjadi NULL.

  • VARIAN

    Berlaku aturan jenis untuk nilai aktual yang dimiliki oleh VARIANT jenis data.

Contoh

> SELECT cast(NULL AS ARRAY<INT>);
  NULL

> SELECT cast(array('t', 'f', NULL) AS ARRAY<BOOLEAN>);
  [true, false, NULL]

> SELECT cast(array('t', 'f', NULL) AS INTERVAL YEAR);
  Error: DATATYPE_MISMATCH

> SELECT cast(array('t', 'f', 'o') AS ARRAY<BOOLEAN>);
  Error: CAST_INVALID_INPUT

> SELECT cast(array('t', 'f', NULL)::VARIANT AS ARRAY<BOOLEAN>);
  [true, false, NULL]

PETA

Jika targetType adalah MAP dengan targetKeyType <, dan targetValueType > serta sourceExpr berjenis:

  • KOSONG

    Hasilnya adalah NULL dari targetType.

  • MAP <sourceKeyType, sourceValueType >

    Jika konversi dari sourceKeyType ke targetKeyType dan sourceValueType ke targetValueType didukung, hasilnya adalah MAP<targetKeyType, targetValueType> dengan semua kunci dikonversi menjadi targetKeyType dan semua nilai dikonversi menjadi targetValueType.

    Azure Databricks menimbulkan kesalahan jika pemeran tidak didukung atau jika salah satu kunci atau nilai tidak dapat ditransmisikan.

    Gunakan try_cast untuk mengubah data tidak valid atau kesalahan luapan menjadi NULL.

  • VARIAN

    Berlaku aturan jenis untuk nilai aktual yang dimiliki oleh VARIANT jenis data.

  • OBJECT < [sourceFieldName : sourceFieldType [, ...]] >

    Setiap instance sourceFieldName dari jenis STRING diubah menjadi targetKeyType dan dipetakan ke kunci peta. Setiap nilai sumber bidang sourceFieldType dikasting targetValueType dan dipetakan ke nilai peta yang sesuai.

    Azure Databricks menimbulkan kesalahan jika ada cast yang tidak didukung atau jika salah satu nilai bidang atau nilai kunci tidak dapat ditransmisikan.

    Gunakan try_cast untuk mengubah data tidak valid atau kesalahan luapan menjadi NULL.

Contoh

> SELECT cast(NULL AS MAP<STRING, INT>);
  NULL

> SELECT cast(map('10', 't', '15', 'f', '20', NULL) AS MAP<INT, BOOLEAN>);
  {10 -> true, 15 -> false, 20 -> null}

> SELECT cast(map('10', 't', '15', 'f', '20', NULL) AS MAP<INT, ARRAY<INT>>);
  Error: DATATYPE_MISMATCH

> SELECT cast(map('10', 't', '15', 'f', '20', 'o') AS MAP<INT, BOOLEAN>);
  Error: CAST_INVALID_INPUT

-- Casting an OBJECT to a MAP
> SELECT schema_of_variant(parse_json('{"cars": 12, "bicycles": 5 }'));
  OBJECT<bicycles: BIGINT, cars: BIGINT>
> SELECT CAST(parse_json('{"cars": 12, "bicycles": 5 }') AS MAP<STRING, INTEGER>);
  {bicycles -> 5, cars -> 12}

STRUKTUR

Jika targetType adalah STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, ...]] > dan sourceExpr berjenis:

  • KOSONG

    Hasilnya adalah NULL dari targetType.

  • STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >

    sourceExpr dapat dilemparkan ke targetType jika semua kondisi ini benar:

    • Jenis sumber memiliki jumlah bidang yang sama dengan target
    • Untuk semua bidang: sourceFieldTypeN dapat ditransmisikan ke targetFieldTypeN.
    • Untuk semua nilai bidang: Nilai bidang sumber N dapat diubah menjadi targetFieldTypeN dan nilainya tidak null jika bidang target N ditandai NOT NULL.

    sourceFieldNames, batasan sumber NOT NULL dan COMMENTs pada sumber tidak harus sesuai dengan targetType dan diabaikan.

    Azure Databricks menimbulkan kesalahan jika pemeran tidak didukung atau jika salah satu bidang tidak dapat ditransmisikan.

    Gunakan try_cast untuk mengubah data tidak valid atau kesalahan luapan menjadi NULL.

  • VARIAN

    Berlaku aturan jenis untuk nilai aktual yang dimiliki oleh VARIANT jenis data.

  • OBJECT < [sourceFieldName : sourceFieldType [, ...]] >

    Semua sourceFieldName cocok dengan sourceFieldName. Setiap nilai bidang sumber sourceFieldType dikonversi ke targetValueType yang cocok dan dipetakan ke nilai peta yang sesuai masing-masing.

    Jika targetFieldName tidak cocok, nilai bidang adalah NULL.

    Jika sourceFieldName tidak cocok, bidang diabaikan.

    Azure Databricks menimbulkan kesalahan jika ada cast yang tidak didukung atau jika salah satu nilai bidang atau nilai kunci tidak dapat ditransmisikan.

    Gunakan try_cast untuk mengubah data tidak valid atau kesalahan luapan menjadi NULL.

Contoh

> SELECT cast(NULL AS STRUCT<a:INT>);
  NULL

> SELECT cast(named_struct('a', 't', 'b', '1900-01-01') AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
  {"b":true,"c":1900-01-01}

> SELECT cast(named_struct('a', 't', 'b', NULL::DATE) AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
  Error: DATATYPE_MISMATCH

> SELECT cast(named_struct('a', 't', 'b', '1900') AS STRUCT<b:BOOLEAN, c:ARRAY<INT>>);
  Error: DATATYPE_MISMATCH

> SELECT cast(named_struct('a', 't', 'b', 'hello') AS STRUCT<b:BOOLEAN, c:DATE>);
  Error: CAST_INVALID_INPUT

> SELECT cast(named_struct('a', 't', 'b', '1900-01-01')::VARIANT AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
  {"b":true,"c":1900-01-01}

-- Casting an OBJECT to a STRUCT
> SELECT schema_of_variant(parse_json('{"name": "jason", "age": 25 }'));
  OBJECT<age: BIGINT, name: STRING>
> SELECT CAST(parse_json('{"name": "jason", "age": 25 }') AS STRUCT<id: BIGINT, name: STRING>);
  {"id":null,"name":"jason"}

VARIAN

Jika targetType itu adalah VARIAN dan sourceExpr berjenis:

  • KOSONG

    Hasilnya adalah NULL dari jenis VARIANT.

  • numerik

    Hasilnya adalah VARIANT, yang mewakili nilai numerik. Presisi jenis DECIMAL harus <= 38.

    Semua numerik integral dipetakan ke BIGINT.

    Semua nilai DECIMAL dipetakan ke tingkat presisi dan skala tersempit.

  • String

    Hasilnya adalah VARIANT, yang mewakili STRING nilai .

  • TANGGAL

    Hasilnya adalah VARIANT, yang mewakili DATE nilai .

  • Timestamp

    Hasilnya adalah VARIANT, yang mewakili TIMESTAMP nilai .

  • TIMESTAMP_NTZ

    Hasilnya adalah VARIANT, yang mewakili TIMESTAMP NTZ nilai .

  • BOOLEAN

    Hasilnya adalah VARIANT, yang mewakili BOOLEAN nilai .

  • BINER

    Hasilnya adalah VARIANT, yang mewakili BINARY nilai .

  • ARRAY < sourceElementType >

    Jika cast dari sourceElementType ke VARIANT didukung, hasilnya adalah VARIANT, mewakili ARRAY<sourceElementType>.

    Azure Databricks menimbulkan kesalahan jika pemeran tidak didukung.

  • STRUKTUR

    Pengubahan tipe data ini tidak didukung langsung karena VARIANT tidak dapat mempertahankan urutan bidang struktur. Gunakan to_variant_object untuk mengonversi STRUCT ke VARIANT sebagai OBJECT.

  • PETA

    Pemeran ini tidak didukung secara langsung karena VARIANT tidak dapat mempertahankan jenis.MAP Gunakan to_variant_object untuk mengonversi MAP ke VARIANT sebagai OBJECT. Kunci peta harus berupa string.

    Azure Databricks menimbulkan kesalahan jika pemeran tidak didukung.

    Gunakan try_cast untuk mengubah data tidak valid atau kesalahan luapan menjadi NULL.

Contoh

> SELECT cast(NULL AS VARIANT);
  NULL

> SELECT cast(5.1000 AS VARIANT);
  5.1

> SELECT schema_of_variant(cast(5 AS VARIANT));
  BIGINT