Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:
Databricks SQL
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:
-
Hasilnya adalah
NULLdari jenis numerik yang ditentukan. -
Jika
targetTypemerupakan numerik integral, hasilnya dipotongsourceExprmenjadi bilangan bulat.Jika tidak, hasilnya
sourceExprdibulatkan agar sesuai dengan skala yang tersedia daritargetType.Jika nilai berada di luar rentang
targetType, Azure Databricks menaikkan CAST_OVERFLOW.Gunakan try_cast untuk mengubah kesalahan luapan menjadi
NULL. -
sourceExprdibaca sebagai nilai harfiah daritargetType.Jika
sourceExprtidak 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. -
Hasilnya adalah jumlah detik yang berlalu antara
1970-01-01 00:00:00 UTCdansourceExpr.Jika
targetTypemerupakan angka integral, hasilnya dipotong menjadi bilangan bulat.Jika tidak, hasilnya dibulatkan agar sesuai dengan skala
targetTypeyang tersedia.Jika hasilnya berada di luar rentang
targetType, Azure Databricks menaikkan CAST_OVERFLOW.Gunakan try_cast untuk mengubah kesalahan luapan menjadi
NULL. -
Berlaku untuk:
Databricks SQL
Databricks Runtime 11.3 LTS ke atasJenis target harus berupa numerik yang tepat.
Mengingat
INTERVAL upper_unit TO lower_unithasilnya diukur dalam jumlah totallower_unit. Jikalower_unitadalahSECOND, pecahan detik disimpan di sisi kanan koma desimal. Untuk semua interval lainnya, hasilnya selalu berupa angka integral. -
Jika
sourceExpradalah:-
true: Hasilnya adalah 1. -
false: Hasilnya adalah 0. -
NULL: Hasilnya adalahNULL.
-
-
Aturan mengenai jenis nilai aktual dari jenis
VARIANTberlaku.
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:
-
Hasilnya adalah
NULLstring. -
Hasilnya adalah angka harfiah dengan tanda minus opsional dan tidak ada nol di depan kecuali satu digit di sebelah kiri titik desimal. Jika
targetTypeadalahDECIMAL(p, s)denganslebih 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,000dan lebih besar atau sama dengan0.001, hasilnya dinyatakan tanpa notasi ilmiah dengan setidaknya satu digit di kedua sisi koma desimal.Jika tidak, Azure Databricks menggunakan mantissa diikuti oleh
Edan 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.-
Jika tahun antara 9999 BCE dan 9999 CE, hasilnya adalah dateString masing-masing dalam bentuk
-YYYY-MM-DDdanYYYY-MM-DD.Untuk tahun sebelum atau setelah rentang ini, jumlah digit yang diperlukan ditambahkan ke komponen tahun dan
+digunakan untuk CE. -
Jika tahun antara 9999 BCE dan 9999 CE, hasilnya adalah timestampString masing-masing dalam bentuk
-YYYY-MM-DD hh:mm:ssdanYYYY-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. -
Jika tahun antara 9999 BCE dan 9999 CE, hasilnya adalah timestampString masing-masing dalam bentuk
-YYYY-MM-DD hh:mm:ssdanYYYY-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. -
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' YEARINTERVAL 'Y-M' YEAR TO MONTHINTERVAL 'M' MONTH
-
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' DAYINTERVAL 'D h' DAY TO HOURINTERVAL 'D h:m' DAY TO MINUTEINTERVAL 'D h:m:s' DAY TO SECONDINTERVAL 'h' HOURINTERVAL 'h:m' HOUR TO MINUTEINTERVAL 'm:s' MINUTE TO SECONDINTERVAL 's' SECOND
-
Hasil dari
trueboolean adalah harfiahSTRINGtrue. Untukfalseitu adalah STRING literalfalse. UntukNULLitu adalah string NULL. -
Hasilnya adalah biner
sourceExpryang ditafsirkan sebagai urutan karakter UTF-8.Azure Databricks tidak memvalidasi karakter UTF-8. Pengecoran dari
BINARYkeSTRINGtidak akan pernah menyisipkan karakter pengganti atau menghasilkan error. -
Hasilnya adalah daftar elemen pemeran yang dipisahkan oleh koma dan dikurung dengan kurung siku
[ ]. Satu spasi mengikuti setiap koma.NULLElemen diterjemahkan menjadi harfiahnull.Azure Databricks tidak mengutip atau menandai elemen individual, yang mungkin berisi tanda kurung atau koma.
-
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 harfiahnull.Azure Databricks tidak mengutip atau menandai kunci atau nilai individual, yang mungkin berisi kurung kurawal, koma, atau
->. -
Hasilnya adalah daftar nilai-nilai bidang cast yang dipisahkan koma, dan dikelilingi oleh kurung kurawal
{ }. Satu spasi mengikuti setiap koma. Nilai bidangNULLditerjemahkan menjadi harfiahnull.Azure Databricks tidak mengutip atau menandai nilai bidang individual, yang mungkin berisi kurung kurawal, atau koma.
-
Aturan mengenai jenis nilai aktual dari jenis
VARIANTberlaku.
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:
-
Hasilnya adalah
NULLDATE. -
sourceExprharus berupa dateString yang valid.Jika
sourceExprbukandateStringyang valid, Azure Databricks menaikkan CAST_INVALID_INPUT.Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi
NULL. -
Hasilnya adalah bagian tanggal dari stempel waktu
sourceExpr. -
Hasilnya adalah bagian tanggal dari timestamp_ntz
sourceExpr. -
Berlaku aturan jenis untuk nilai aktual yang dimiliki oleh
VARIANTjenis 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:
-
Hasilnya adalah
NULLDATE. -
sourceExprdibaca sebagai jumlah detik sejak1970-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. -
sourceExprharus berupa timestampString yang valid.Jika
sourceExprbukantimestampStringyang valid, Azure Databricks menaikkan CAST_INVALID_INPUT.Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi
NULL. -
Hasilnya adalah
sourceExprDATEpada pukul00:00:00.
Hasilnya adalah nilai tanda waktu dengan bidang tahun/bulan/hari/jam/menit/detik yang sama dari timestamp_ntz sourceExpr.
-
Berlaku aturan jenis untuk nilai aktual yang dimiliki oleh
VARIANTjenis 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:
-
Hasilnya adalah
NULLDATE. -
sourceExprharus berupa timestampString yang valid.Jika
sourceExprbukantimestampStringyang valid, Azure Databricks menaikkan CAST_INVALID_INPUT.Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi
NULL. -
Hasilnya adalah
sourceExprTANGGAL pada00:00:00jam. -
Hasilnya adalah waktu lokal di
sourceExprzona waktu sesi. -
Berlaku aturan jenis untuk nilai aktual yang dimiliki oleh
VARIANTjenis 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:
-
Hasilnya adalah
NULLinterval bulan tahunan. -
Berlaku untuk:
Databricks SQL
Databricks Runtime 11.3 LTS ke atasNumerik ditafsirkan sebagai jumlah unit yang lebih rendah dari
targetTypeyearmonthIntervalQualifier. -
sourceExprharus berupa yearMonthIntervalString yang valid.Jika
sourceExprbukanyearMonthIntervalStringyang valid, Azure Databricks menaikkan CAST_INVALID_INPUT.Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi
NULL. -
targetTypeJika yearMonthIntervalQualifier menyertakanMONTHnilai tetap tidak berubah, tetapi diinterpretasikan ulang agar sesuai dengan jenis target.Jika tidak, jika jenis sumber yearMonthIntervalQualifier menyertakan
MONTH, hasilnya akan terpotong menjadi tahun penuh.
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:
-
Hasilnya adalah
NULLinterval waktu sehari. -
Berlaku untuk:
Databricks SQL
Databricks Runtime 11.3 LTS ke atasNumerik ditafsirkan sebagai jumlah unit yang lebih rendah dari
targetTypedayTimeIntervalQualifier. Jika unit adalahSECOND, pecahan apa pun ditafsirkan sebagai bagian dari detik. -
sourceExprharus berupa dayTimeIntervalString yang valid.Jika
sourceExprbukandayTimeIntervalStringyang valid, Azure Databricks menaikkan CAST_INVALID_INPUT.Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi
NULL. -
targetTypeJika dayTimeIntervalQualifier menyertakan unit terkecil dari jenis sumber dayTimeIntervalQualifier, nilainya tetap tidak berubah, tetapi diinterpreasikan ulang agar sesuai dengan jenis target.Jika tidak, interval
sourceExprdipotong agar sesuai dengantargetType.
> 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:
-
Hasilnya adalah
NULLdari jenisBOOLEAN. -
Jika
sourceExpradalah:0: Hasilnya adalahfalse.-
NULL: Hasilnya adalahNULL. -
special floating point value: Hasilnya adalahtrue.
Jika tidak, hasilnya adalah
true.-
-
Jika
sourcEexpradalah (tidak peka huruf besar/kecil):-
'T', 'TRUE', 'Y', 'YES', or '1': Hasilnya adalahtrue -
'F', 'FALSE', 'N', 'NO', or '0': Hasilnya adalahfalse -
NULL: Hasilnya adalahNULL
Jika tidak, Azure Databricks menaikkan CAST_INVALID_INPUT.
Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi
NULL. -
-
Aturan mengenai jenis nilai aktual dari jenis
VARIANTberlaku.
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:
-
Hasilnya adalah
NULLdari jenisBINARY. -
Hasilnya adalah pengkodean UTF-8 dari
surceExpr. -
Berlaku aturan jenis untuk nilai aktual yang dimiliki oleh
VARIANTjenis 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:
-
Hasilnya adalah
NULLdaritargeType. -
Jika transmisi dari
sourceElementTypeketargetElementTypedidukung, hasilnya adalahARRAY<targetElementType>dengan semua elemen ditransmisikan ketargetElementType.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. -
Berlaku aturan jenis untuk nilai aktual yang dimiliki oleh
VARIANTjenis 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:
-
Hasilnya adalah
NULLdaritargetType. MAP <sourceKeyType, sourceValueType >
Jika konversi dari
sourceKeyTypeketargetKeyTypedansourceValueTypeketargetValueTypedidukung, hasilnya adalahMAP<targetKeyType, targetValueType>dengan semua kunci dikonversi menjaditargetKeyTypedan semua nilai dikonversi menjaditargetValueType.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.-
Berlaku aturan jenis untuk nilai aktual yang dimiliki oleh
VARIANTjenis data. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Setiap instance
sourceFieldNamedari jenisSTRINGdiubah menjaditargetKeyTypedan dipetakan ke kunci peta. Setiap nilai sumber bidangsourceFieldTypedikastingtargetValueTypedan 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:
-
Hasilnya adalah
NULLdaritargetType. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
sourceExprdapat dilemparkan ketargetTypejika semua kondisi ini benar:- Jenis sumber memiliki jumlah bidang yang sama dengan target
- Untuk semua bidang:
sourceFieldTypeNdapat ditransmisikan ketargetFieldTypeN. - Untuk semua nilai bidang: Nilai bidang sumber N dapat diubah menjadi
targetFieldTypeNdan nilainya tidak null jika bidang target N ditandaiNOT NULL.
sourceFieldNames, batasan sumberNOT NULLdanCOMMENTs pada sumber tidak harus sesuai dengantargetTypedan 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.-
Berlaku aturan jenis untuk nilai aktual yang dimiliki oleh
VARIANTjenis data. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Semua
sourceFieldNamecocok dengansourceFieldName. Setiap nilai bidang sumbersourceFieldTypedikonversi ketargetValueTypeyang cocok dan dipetakan ke nilai peta yang sesuai masing-masing.Jika
targetFieldNametidak cocok, nilai bidang adalahNULL.Jika
sourceFieldNametidak 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:
-
Hasilnya adalah
NULLdari jenisVARIANT. -
Hasilnya adalah
VARIANT, yang mewakili nilai numerik. Presisi jenisDECIMALharus <= 38.Semua numerik integral dipetakan ke
BIGINT.Semua nilai
DECIMALdipetakan ke tingkat presisi dan skala tersempit. -
Hasilnya adalah
VARIANT, yang mewakiliSTRINGnilai . -
Hasilnya adalah
VARIANT, yang mewakiliDATEnilai . -
Hasilnya adalah
VARIANT, yang mewakiliTIMESTAMPnilai . -
Hasilnya adalah
VARIANT, yang mewakiliTIMESTAMP NTZnilai . -
Hasilnya adalah
VARIANT, yang mewakiliBOOLEANnilai . -
Hasilnya adalah
VARIANT, yang mewakiliBINARYnilai . -
Jika cast dari
sourceElementTypekeVARIANTdidukung, hasilnya adalahVARIANT, mewakiliARRAY<sourceElementType>.Azure Databricks menimbulkan kesalahan jika pemeran tidak didukung.
-
Pengubahan tipe data ini tidak didukung langsung karena
VARIANTtidak dapat mempertahankan urutan bidang struktur. Gunakan to_variant_object untuk mengonversiSTRUCTkeVARIANTsebagaiOBJECT. -
Pemeran ini tidak didukung secara langsung karena
VARIANTtidak dapat mempertahankan jenis.MAPGunakan to_variant_object untuk mengonversiMAPkeVARIANTsebagaiOBJECT. 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