cast
işlevi
Şunlar için geçerlidir: Databricks SQL Databricks Runtime
Değeri expr
hedef veri türüne dönüştürür type
. Bu işleç, :: (iki nokta üst üste işareti) işleci için bir eş anlamlıdır
Söz dizimi
cast(sourceExpr AS targetType)
Bağımsız değişkenler
sourceExpr
: Herhangi bir yayınlanabilir ifade.targetType
: Sonucun veri türü.
Döndürülenler
Sonuç türüdür targetType
.
Veri türü atamasının aşağıdaki birleşimleri geçerlidir:
Kaynak (satır) Hedef(sütun) | VOİD | Sayısal | DİZE | DATE | TIMESTAMP | TIMESTAMP_NTZ | yıl-ay aralığı | gün-saat aralığı | BOOLEAN | IKİLİ | DİZİ | HARİTA | YAPI |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
VOİD | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
Sayısal | N | Y | Y | N | Y | N | Y | Y | Y | N | N | N | N |
DİZE | N | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N |
DATE | N | N | Y | Y | Y | Y | N | N | N | N | N | N | N |
TIMESTAMP | N | Y | Y | Y | Y | Y | N | N | N | N | N | N | N |
TIMESTAMP_NTZ | N | N | Y | Y | Y | Y | N | N | N | N | N | N | N |
yıl-ay aralığı | N | Y | Y | N | N | N | Y | N | N | N | N | N | N |
gün-saat aralığı | N | Y | Y | N | N | N | N | Y | N | N | N | N | N |
BOOLEAN | N | Y | Y | N | Y | N | N | N | Y | N | N | N | N |
IKİLİ | N | Y | Y | N | N | N | N | N | N | Y | N | N | N |
DİZİ | N | N | Y | N | N | N | N | N | N | N | Y | N | N |
HARİTA | N | N | Y | N | N | N | N | N | N | N | N | Y | N |
YAPI | N | N | Y | N | N | N | N | N | N | N | N | N | Y |
targetType'a dayalı kurallar ve sınırlamalar
Uyarı
Databricks Runtime'da, spark.sql.ansi.enabled ise false
, taşma bir hataya neden olmaz, bunun yerine sonucu "sarmalar".
sourceExpr
Geçersiz biçime veya geçersiz karakterlere targetType
sahip bir değer ile sonuçlanırNULL
.
sayısal
targetType
sayısal ise ve sourceExpr
türündeyse:
-
Sonuç, belirtilen sayısal türün NULL değeridir.
-
Tamsayı sayısalsa
targetType
, sonuçsourceExpr
tamsayıya yuvarlanır.Aksi takdirde, sonuç
sourceExpr
kullanılabilir ölçeğinetargetType
uyacak şekilde yuvarlanr.Değer aralığının
targetType
dışındaysa bir taşma hatası oluşur.Taşma hatalarını içine
NULL
dönüştürmek için try_cast kullanın. -
sourceExpr
değerinintargetType
değişmez değeri olarak okunur.Değişmez değerlerin biçimiyle uyumlu değilse
sourceExpr
bir hata oluşur.Değer aralığının
targetType
dışındaysa bir taşma hatası oluşur.Taşma ve geçersiz biçim hatalarını içine
NULL
dönüştürmek için try_cast kullanın. -
Sonuç, ile
sourceExpr
arasında1970-01-01 00:00:00 UTC
geçen saniye sayısıdır.Tamsayı sayısalsa
targetType
, sonuç tamsayıya yuvarlanır.Aksi takdirde, sonuç kullanılabilir ölçeğine
targetType
uyacak şekilde yuvarlanr.Sonuç aralığının
targetType
dışındaysa taşma hatası oluşur.Taşma hatalarını içine
NULL
dönüştürmek için try_cast kullanın. -
Şunlar için geçerlidir: Databricks SQL Databricks Runtime 11.3 LTS ve üzeri
Hedef türü tam bir sayısal olmalıdır.
INTERVAL upper_unit TO lower_unit
Verilen sonuç, toplam sayısıylalower_unit
ölçülür.lower_unit
iseSECOND
, kesirli saniyeler ondalık ayırıcının sağ kısmında depolanır. Diğer tüm aralıklar için sonuç her zaman tam sayıdır. -
Şu durumdaysa
sourceExpr
:true
: Sonuç 0'dır.false
: Sonuç 1'dir.NULL
: Sonuç olarak elde edilirNULL
.
Örnekler
> 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);
Overflow
> SELECT cast(128 AS DECIMAL(2, 0));
Overflow
> SELECT cast('123' AS INT);
123
> SELECT cast('123.0' AS INT);
Invalid format
> 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: 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
DİZE
targetType
dize türündeyse ve sourceExpr
türündeyse:
-
Sonuç bir NULL dizedir.
-
Sonuç, isteğe bağlı eksi işareti olan ve ondalık ayırıcının solundaki tek basamak dışında önünde sıfır olmayan sabit sayıdır.
targetType
DECIMAL(p, s)
değeri 0'ıns
üzerine çıkarsa, ondalık ayırıcı eklenir ve sonundaki sıfırlar ölçeklendirilecek şekilde eklenir. -
Mutlak sayı bundan küçükse ve değerinden
10,000,000
büyük veya eşitse0.001
, sonuç ondalık ayırıcının her iki tarafında en az bir basamakla bilimsel gösterim olmadan ifade edilir.Aksi takdirde, Azure Databricks bir mantis ve ardından
E
bir üs kullanır. Mantiste, ondalık noktasının solunda bir basamak ve sağda sıfırdan büyük en az basamak sayısı isteğe bağlı bir baştaki eksi işareti vardır. Üs, isteğe bağlı baştaki eksi işaretine sahiptir. -
Yıl 9999 BCE ile 9999 CE arasındaysa, sonuç formun
-YYYY-MM-DD
veYYYY-MM-DD
sırasıyla dateString değeridir.Bu aralık öncesinde veya sonrasında yıllar boyunca, yıl bileşenine gerekli basamak sayısı eklenir ve
+
CE için kullanılır. -
Yıl 9999 BCE ile 9999 CE arasındaysa, sonuç formun
-YYYY-MM-DD hh:mm:ss
veYYYY-MM-DD hh:mm:ss
sırasıyla zaman damgasıString'idir.Bu aralık öncesinde veya sonrasında yıllar boyunca, yıl bileşenine gerekli basamak sayısı eklenir ve
+
CE için kullanılır.Gerekirse kesirli saniyeler
.f...
eklenir. -
Yıl 9999 BCE ile 9999 CE arasındaysa, sonuç formun
-YYYY-MM-DD hh:mm:ss
veYYYY-MM-DD hh:mm:ss
sırasıyla zaman damgasıString'idir.Bu aralık öncesinde veya sonrasında yıllar boyunca, yıl bileşenine gerekli basamak sayısı eklenir ve
+
CE için kullanılır.Gerekirse kesirli saniyeler
.f...
eklenir. -
Sonuç, aralık değişmez değeri en kısa gösterimidir. Aralık negatifse, işareti içine
interval-string
eklenir. 10'dan küçük birimler için baştaki sıfırlar atlanır.Tipik bir yıl-ay aralığı dizesi şu forma sahiptir:
INTERVAL 'Y' YEAR
INTERVAL 'Y-M' YEAR TO MONTH
INTERVAL 'M' MONTH
-
Sonuç, aralık değişmez değeri en kısa gösterimidir. Aralık negatifse, işareti içine
interval-string
eklenir. 10'dan küçük birimler için baştaki sıfırlar atlanır.Tipik bir gün zaman aralığı dizesi şu forma sahiptir:
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
-
Boole değerinin
true
sonucu STRING değişmez değeridirtrue
. Bunun nedenifalse
STRING değişmez değeridirfalse
veNULL
null dizedir. -
Sonuç, ikilinin
sourceExpr
UTF-8 karakter dizisi olarak yorumlanmış olmasıdır.Azure Databricks UTF-8 karakterlerini doğrulamaz. 'den
BINARY
STRING
atama, hiçbir zaman değiştirme karakterleri eklemez veya hata oluşturmaz. -
Sonuç, köşeli ayraçlarla
[ ]
ayrılmış bir virgülle ayrılmış atama öğeleri listesidir. Her virgülden bir boşluk takip eder. BirNULL
öğe değişmez değerenull
çevrilir.Azure Databricks, köşeli ayraç veya virgül içerebilen tek tek öğeleri alıntılamaz veya başka bir şekilde işaretlemez.
-
Sonuç, küme ayraçları ile ayrılmış olan atama anahtarı değer çiftlerinin
{ }
virgülle ayrılmış bir listesidir. Her virgülden bir boşluk takip eder. Her anahtar değer çifti ile->
ayrılır. BirNULL
eşleme değeri değişmez değerinenull
çevrilir.Azure Databricks, küme ayracı, virgül veya içerebilecek tek tek anahtarları veya değerleri tırnak içine almaz veya
->
işaretlemez. -
Sonuç, küme ayracı
{ }
ile küme ayraçları ile ayrılmış, atama alanı değerlerinin virgülle ayrılmış bir listesidir. Her virgülden bir boşluk takip eder. AlanNULL
değeri değişmeznull
değere çevrilir.Azure Databricks, küme ayraçları veya virgül içerebilen tek tek alan değerlerini tırnak içine almaz veya başka bir şekilde işaretlemez.
Örnekler
> 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);
{}
DATE
targetType
date türündeyse ve sourceExpr
türündeyse:
-
Sonuç NULL TARİhtir.
-
sourceExpr
geçerli bir dateString olmalıdır.sourceExpr
GeçerlidateString
bir değilse, Azure Databricks bir hata döndürür.Geçersiz veri hatalarını içine
NULL
dönüştürmek için try_cast kullanın. -
Sonuç, zaman damgasının
sourceExpr
tarih bölümüdür. -
Sonuç, timestamp_ntz
sourceExpr
tarih bölümüdür.
Örnekler
> 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
> 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
TIMESTAMP
targetType
timestamp türündeyse ve sourceExpr
türündeyse:
-
Sonuç NULL TARİhtir.
-
sourceExpr
, tarihinden bu yana1970-01-01 00:00:00 UTC
saniye sayısı olarak okunur.Mikrosaniyeden küçük kesirler kesilir.
Değer aralığının
TIMESTAMP
dışındaysa bir taşma hatası oluşur.Taşma hatalarını içine
NULL
dönüştürmek için try_cast kullanın. -
sourceExpr
geçerli bir timestampString olmalıdır.sourceExpr
GeçerlitimestampString
bir değilse, Azure Databricks bir hata döndürür.Geçersiz veri hatalarını içine
NULL
dönüştürmek için try_cast kullanın. -
Sonuç, hrs'deki
sourceExpr
00:00:00
TARİh'tir.
Sonuç, timestamp_ntz aynı yıl/ay/gün/saat/dakika/saniye alanlarına sahip bir zaman damgası değeridir sourceExpr
.
Örnekler
> 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: 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
> 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
TIMESTAMP_NTZ
targetType
TIMESTAMP_NTZ türündeyse ve sourceExpr
türündeyse:
-
Sonuç NULL TARİhtir.
-
sourceExpr
geçerli bir timestampString olmalıdır.sourceExpr
GeçerlitimestampString
bir değilse, Azure Databricks bir hata döndürür.Geçersiz veri hatalarını içine
NULL
dönüştürmek için try_cast kullanın. -
Sonuç, hrs'deki
sourceExpr
00:00:00
TARİh'tir.
Sonuç, oturum saat dilimindeki yerel saattir sourceExpr
.
Örnekler
> 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
> 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
yıl-ay aralığı
targetType
yıl-ay aralığıysa ve sourceExpr
türündeyse:
-
Sonuç, null yıl-ay aralığıdır.
-
Şunlar için geçerlidir: Databricks SQL Databricks Runtime 11.3 LTS ve üzeri
Sayısal, yearmonthIntervalQualifier'ın
targetType
daha düşük birim sayısı olarak yorumlanır. -
sourceExpr
geçerli bir yearMonthIntervalString olmalıdır.sourceExpr
GeçerliyearMonthIntervalString
bir değilse, Azure Databricks bir hata döndürür.Geçersiz veri hatalarını içine
NULL
dönüştürmek için try_cast kullanın. -
targetType
yearMonthIntervalQualifier değeri içeriyorsaMONTH
değer değişmeden kalır, ancak hedef türle eşleşecek şekilde yeniden yorumlanır.Aksi takdirde, yearMonthIntervalQualifier kaynak türü içeriyorsa
MONTH
, sonuç tam yıllara yuvarlanır.
Örnekler
> 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
> 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
gün-saat aralığı
targetType
değeri bir gün-saat aralığıysa ve sourceExpr
türündeyse:
-
Sonuç NULL bir gün-zaman aralığıdır.
-
Şunlar için geçerlidir: Databricks SQL Databricks Runtime 11.3 LTS ve üzeri
Sayısal, dayTimeIntervalQualifier değerinin
targetType
daha düşük birim sayısı olarak yorumlanır. BirimSECOND
herhangi bir kesir ise kesirli saniye olarak yorumlanır. -
sourceExpr
geçerli bir dayTimeIntervalString olmalıdır.sourceExpr
GeçerlidayTimeIntervalString
bir değilse, Azure Databricks bir hata döndürür.Geçersiz veri hatalarını içine
NULL
dönüştürmek için try_cast kullanın. -
targetType
dayTimeIntervalQualifier, dayTimeIntervalQualifier kaynak türünün en küçük birimini içeriyorsa, değer değişmeden kalır, ancak hedef türle eşleşecek şekilde yeniden yorumlanır.Aksi takdirde,
sourceExpr
aralığı içine sığacaktargetType
şekilde kesilir.
> 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
> 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
targetType
bir BOOLEAN ise ve sourceExpr
türündeyse:
-
Sonuç bir NULL Boole değeridir.
-
Şu durumdaysa
sourceExpr
:0
: Sonuç olarak elde edilirfalse
.NULL
: Sonuç olarak elde edilirNULL
.special floating point value
: Sonuç olarak elde edilirtrue
.
Aksi takdirde, sonuç şeklindedir
true
.
-
Ise
sourcEexpr
(büyük/küçük harfe duyarsız):'T', 'TRUE', 'Y', 'YES', or '1'
: Sonuç şu şekildedir:true
'F', 'FALSE', 'N', 'NO', or '0'
: Sonuç şu şekildedir:false
NULL
: Sonuç şu şekildedir:NULL
Aksi takdirde, Azure Databricks boole türü hatası için geçersiz bir giriş söz dizimi döndürür.
Geçersiz veri hatalarını içine
NULL
dönüştürmek için try_cast kullanın.
Örnekler
> 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: invalid input syntax for type boolean
> 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
IKİLİ
targetType
bir BINARY ise ve sourceExpr
türündeyse:
Örnekler
> SELECT cast(NULL AS BINARY);
NULL
> SELECT hex(cast('Spark SQL' AS BINARY));
537061726B2053514C
> SELECT hex(cast('Oдesa' AS BINARY));
4FD0B4657361
DİZİ
targetType
bir ARRAY < targetElementType>ise ve sourceExpr
türündeyse:
-
Sonuç, değerinin NULL değeridir
targeType
. -
'den
sourceElementType
targetElementType
ataması destekleniyorsa, sonucu tüm öğelerinin öğesine dökümünü içerentargetElementType
birARRAY<targetElementType>
olur.Azure Databricks, atama desteklenmiyorsa veya öğelerden herhangi biri yayınlanamazsa bir hata oluşturur.
Geçersiz verileri veya taşma hatalarını içine
NULL
dönüştürmek için try_cast kullanın.
Örnekler
> 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: cannot cast array<string> to interval year
> SELECT cast(array('t', 'f', 'o') AS ARRAY<BOOLEAN>);
error: invalid input syntax for type boolean: o.
HARİTA
targetType
bir MAP < targetKeyType ise targetValueType > ve sourceExpr
türü:
-
Sonuç, değerinin NULL değeridir
targetType
. MAP <sourceKeyType, sourceValueType >
'den ve
sourceValueType
targetValueType
'densourceKeyType
targetKeyType
atamalar destekleniyorsa, sonuç tüm anahtarların öğesine ve tüm değerlerintargetKeyType
öğesine dökümünü içerentargetValueType
birMAP<targetKeyType, targetValueType>
sonucudur.Azure Databricks, atama desteklenmiyorsa veya anahtarlardan veya değerlerden herhangi biri yayınlanamazsa bir hata oluşturur.
Geçersiz verileri veya taşma hatalarını içine
NULL
dönüştürmek için try_cast kullanın.
Örnekler
> 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: cannot cast map<string,string> to map<int,array<int>>
> SELECT cast(map('10', 't', '15', 'f', '20', 'o') AS MAP<INT, BOOLEAN>);
error: invalid input syntax for type boolean: o.
STRUCT
targetType
[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, ...]]>bir STRUCT <ise ve sourceExpr
türündeyse:
-
Sonuç, değerinin NULL değeridir
targetType
. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
sourceExpr
tüm koşulların doğru olması durumunda türüne atılabilirtargetType
:- Kaynak türü, hedefle aynı sayıda alana sahiptir
- Tüm alanlar için:
sourceFieldTypeN
öğesinetargetFieldTypeN
yayınlanabilir. - Tüm alan değerleri için: N kaynak alan değeri olarak
targetFieldTypeN
atanabilir ve hedef alan N olarakNOT NULL
işaretlenirse değer null değildir.
sourceFieldName
s, kaynakNOT NULL
kısıtlamaları ve kaynağınCOMMENT
targetType
ile eşleşmesi gerekmez ve yok sayılır.Azure Databricks, atama desteklenmiyorsa veya anahtarlardan veya değerlerden herhangi biri yayınlanamazsa bir hata oluşturur.
Geçersiz verileri veya taşma hatalarını içine
NULL
dönüştürmek için try_cast kullanın.
Örnekler
> SELECT cast(NULL AS STRUCT<a:INT>);
NULL
> SELECT cast(named_struct('a', 't', 'b', '1900') 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: cannot cast struct<a:string,b:date> to struct<b:boolean,c:date>
> SELECT cast(named_struct('a', 't', 'b', '1900') AS STRUCT<b:BOOLEAN, c:ARRAY<INT>>);
error: cannot cast struct<a:string,b:string> to struct<b:boolean,c:array<int>>
> SELECT cast(named_struct('a', 't', 'b', 'hello') AS STRUCT<b:BOOLEAN, c:DATE>);
error: Cannot cast hello to DateType