Aracılığıyla paylaş


cast işlevi

Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime

Değeri expr hedef veri türüne dönüştürür type. Bu işleç, :: için bir eş anlamlıdır.

Söz dizimi

cast(sourceExpr AS targetType)

Tartışmalar

  • sourceExpr: Herhangi bir dönüştürülebilir ifade.
  • targetType: Sonucun veri türü.

İadeler

Sonuç tipi targetType şeklindedir.

Veri türü atamasının aşağıdaki birleşimleri geçerlidir:

Kaynak (satır) Hedef(sütun) BOŞLUK Sayısal DİZGİ TARİH ZAMAN DAMGASI TIMESTAMP_NTZ yıl-ay aralığı gün-saat aralığı BOOLEAN İKİLİ DİZİ HARİTA YAPI VARYANT NESNE
BOŞLUK Y Y Y Y Y Y Y Y Y Y Y Y Y Y N
Sayısal N Y Y N Y N Y Y Y N N N N Y N
DİZGİ N Y Y Y Y Y Y Y Y Y N N N Y N
TARİH N N Y Y Y Y N N N N N N N Y N
ZAMAN DAMGASI N Y Y Y Y Y N N N N N N N Y N
TIMESTAMP_NTZ N N Y Y Y Y N N N N N N N Y N
yıl-ay aralığı N Y Y N N N Y N N N N N N N N
gün-saat aralığı N Y Y N N N N Y N N N N N N N
BOOLEAN N Y Y N Y N N N Y N N N N Y N
İKİLİ N Y Y N N N N N N Y N N N Y N
DİZİ N N Y N N N N N N N Y N N Y N
HARİTA N N Y N N N N N N N N Y N N N
YAPI N N Y N N N N N N N N N Y N N
VARYANT N Y Y Y Y Y N N Y Y Y Y Y Y N
NESNE N N N N N N N N N N N Y Y N N

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".

Geçersiz biçime veya geçersiz karakterlere sahip bir sourceExpr değeri, bir targetType ile sonuçlanır NULL.

sayısal

targetType sayısal ise ve sourceExpr türündeyse:

  • BOŞLUK

    Sonuç, belirtilen sayısal türdendir NULL .

  • Sayısal

    Tamsayı sayısalsatargetType, sonuç sourceExprtamsayıya yuvarlanır.

    Aksi takdirde, sonuç, mevcut ölçeğe uyması için sourceExpryuvarlanırtargetType hale getirilir.

    Değer aralığının targetTypedışındaysa bir taşma hatası oluşur.

    Taşma hatalarını başka bir biçime dönüştürmek için try_cast kullanın.

  • DİZGİ

    sourceExpr, targetType'nin birebir değeri olarak okunur.

    Eğer sourceExpr değişmez değerlerin biçimiyle uyumlu değilse, bir hata oluşur.

    Değer aralığının targetTypedışındaysa bir taşma hatası oluşur.

    Taşma ve geçersiz biçim hatalarını try_cast kullanarak başka bir biçime dönüştürün.

  • ZAMAN DAMGASI

    Sonuç, 1970-01-01 00:00:00 UTC ile sourceExpr arasında geçen saniye sayısıdır.

    Tamsayı sayısalsatargetType, sonuç tamsayıya yuvarlanır.

    Aksi takdirde, sonuç yuvarlanır ve mevcut ölçeğe sığacak şekilde targetType ayarlanır.

    Sonuç aralığının targetTypedışındaysa taşma hatası oluşur.

    Taşma hatalarını başka bir biçime dönüştürmek için try_cast kullanın.

  • ARALIK

    Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime 11.3 LTS ve üzeri

    Hedef türü tam bir sayısal olmalıdır.

    Belirli bir INTERVAL upper_unit TO lower_unit verildiğinde, sonuç toplam lower_unit sayısıyla ö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.

  • BOOLEAN

    Eğer sourceExpr :

    • true: Sonuç 1'dir.
    • false: Sonuç 0'dır.
    • NULL: Sonuç şudur NULL.
  • VARYANT

    Gerçek değerin VARIANT tipi kuralları uygulanır.

Ö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

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

DİZGİ

sourceExpr bir STRING ise, sonuçta elde edilen STRINGsourceExprharmanlamasını devralır. Diğer tüm durumlarda, elde edilen STRING harmanlaması, varsayılan harmanlama'dir.

Harmanlamayı değiştirmek için harmanlama ifadesini ekleyin.

targetType türü ise STRING ve sourceExpr türündeyse:

  • BOŞLUK

    Sonuç bir NULL dizedir.

  • tam sayısal

    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'ın s üzerine çıkarsa, ondalık ayırıcı eklenir ve sonundaki sıfırlar ölçeklendirilecek şekilde eklenir.

  • kayan nokta ikili

    Eğer mutlak sayı 10,000,000'den küçük ve 0.001'den büyük veya eşitse, sonuç ondalık ayırıcının her iki tarafında en az bir basamakla bilimsel gösterim kullanılmadan ifade edilir.

    Aksi takdirde, Azure Databricks bir mantissa ve ardından E bir üs kullanır. Mantiste, isteğe bağlı olarak başta bir eksi işareti ve ardından ondalık işaretin solunda bir rakam bulunur; sağında ise sıfırdan büyük en az bir rakam bulunur. Üs, isteğe bağlı bir baştaki eksi işaretine sahip olabilir.

  • TARİH

    Eğer yıl MÖ 9999 ile MS 9999 arasındaysa, sonuç sırasıyla dateString biçiminde -YYYY-MM-DD ve YYYY-MM-DD olacaktır.

    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.

  • ZAMAN DAMGASI

    Yıl M.Ö. 9999 ile M.S. 9999 arasındaysa, sonuç sırasıyla timestampString ve formunda bir zaman damgası olur.

    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.

  • TIMESTAMP_NTZ

    Yıl M.Ö. 9999 ile M.S. 9999 arasındaysa, sonuç sırasıyla timestampString ve formunda bir zaman damgası olur.

    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-ay aralığı

    Sonuç, aralık sabitinin en kısa gösterimidir. Aralık negatifse, işaret interval-string içine 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
  • gün-saat aralığı

    Sonuç, aralık sabitinin en kısa gösterimidir. Aralık negatifse, işaret interval-string içine 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
  • BOOLEAN

    Boolean true değerinin sonucu STRING literal true'dır. Bunun için false STRING sabitidir false. Bunun için NULL NULL dizesidir.

  • İKİLİ

    Sonuç, ikili değer sourceExpr olarak bir UTF-8 karakter dizisi şeklinde yorumlanmıştır.

    Azure Databricks UTF-8 karakterlerini doğrulamaz. BINARY türünden STRING türüne dönüşüm, asla değiştirme karakterleri eklemez veya hata oluşturmaz.

  • DİZİ

    Sonuç, köşeli ayraçlarla [ ] çevrelenmiş, virgülle ayrılmış dönüştürme öğeleri listesidir. Her virgülden bir boşluk takip eder. Bir NULL öğesi mecazi anlamda null değer olarak çevrilir.

    Azure Databricks, köşeli ayraç veya virgül içerebilen bireysel öğeleri alıntılamaz veya başka bir şekilde işaretlemez.

  • HARİTA

    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. Bir NULL harita değeri, doğrudan null olarak çevrilir.

    Azure Databricks, kendileri küme parantezi, virgül veya -> içerebilen tek tek anahtarları veya değerleri tırnak içine almaz veya başka şekilde belirtmez.

  • YAPI

    Sonuç, kıvırcık ayraçlarla { } çevrelenmiş, virgülle ayrılmış döküm alanı değerlerinin bir listesidir. Her virgülden bir boşluk takip eder. Alan NULL değeri sabit null 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.

  • VARYANT

    Gerçek değerin VARIANT tipi kuralları uygulanır.

Ö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);
  {}

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

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

tarih

targetType türü ise DATE ve sourceExpr türündeyse:

  • BOŞLUK

    Sonuç bir NULLDATEşeklindedir.

  • DİZGİ

    sourceExpr geçerli bir dateString olmalıdır.

    Azure Databricks, sourceExpr geçerli bir dateString değilse bir hata döndürür.

    Geçersiz veri hatalarını başka bir forma dönüştürmek için try_cast kullanın.

  • ZAMAN DAMGASI

    Sonuç, zaman damgasının sourceExprtarih bölümüdür.

  • TIMESTAMP_NTZ

    Sonuç, timestamp_ntz sourceExprtarih bölümüdür.

  • VARYANT

    Veri türü tarafından tutulan gerçek değer için VARIANT tür kuralları geçerlidir.

Ö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

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

ZAMAN DAMGASI

targetType türü ise TIMESTAMP ve sourceExpr türündeyse:

  • BOŞLUK

    Sonuç bir NULLDATEşeklindedir.

  • Sayısal

    sourceExpr tarihinden bu yana 1970-01-01 00:00:00 UTC saniye sayısı olarak okunur.

    Mikrosaniyeden küçük kesirler kısaltılır.

    Değer aralığının TIMESTAMPdışındaysa bir taşma hatası oluşur.

    Taşma hatalarını başka bir biçime dönüştürmek için try_cast kullanın.

  • DİZGİ

    sourceExpr geçerli bir timestampString olmalıdır.

    Azure Databricks, sourceExpr geçerli bir timestampString değilse bir hata döndürür.

    Geçersiz veri hatalarını başka bir forma dönüştürmek için try_cast kullanın.

  • TARİH

    Sonuç, hrs'deki sourceExprsonucudur.DATE00:00:00

  • TIMESTAMP_NTZ

Sonuç, timestamp_ntz aynı yıl/ay/gün/saat/dakika/saniye alanlarına sahip bir zaman damgası değeridir sourceExpr.

  • VARYANT

    Veri türü tarafından tutulan gerçek değer için VARIANT tür kuralları geçerlidir.

Ö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

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

Zaman Damgası_NTZ

targetType türü ise TIMESTAMP_NTZ ve sourceExpr türündeyse:

  • BOŞLUK

    Sonuç bir NULLDATEşeklindedir.

  • DİZGİ

    sourceExpr geçerli bir timestampString olmalıdır.

    Azure Databricks, sourceExpr geçerli bir timestampString değilse bir hata döndürür.

    Geçersiz veri hatalarını başka bir forma dönüştürmek için try_cast kullanın.

  • TARİH

    Sonuç, sourceExpr TARİH saat 00:00:00'dir.

  • ZAMAN DAMGASI

    Sonuç, oturum saat dilimindeki yerel saattir sourceExpr .

  • VARYANT

    Veri türü tarafından tutulan gerçek değer için VARIANT tür kuralları geçerlidir.

Ö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

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

yıl-ay aralığı

targetType yıl-ay aralığıysa ve sourceExpr türündeyse:

Ö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:

  • BOŞLUK

    Sonuç bir NULL gün-saat aralığıdır.

  • exact_numeric

    Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime 11.3 LTS ve üzeri

    Sayısal değer, targetTypedayTimeIntervalQualifier'ın alt birim sayısı olarak yorumlanır. Birim SECOND herhangi bir kesir ise kesirli saniye olarak yorumlanır.

  • DİZGİ

    sourceExpr geçerli bir dayTimeIntervalString olmalıdır.

    Azure Databricks, sourceExpr geçerli bir dayTimeIntervalString değilse bir hata döndürür.

    Geçersiz veri hatalarını başka bir forma dönüştürmek için try_cast kullanın.

  • gün-saat aralığı

    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ığı targetType uyacak ş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 BOOLEAN ise ve sourceExpr türündeyse:

  • BOŞLUK

    Sonuç, NULL türünde bir BOOLEAN.

  • Sayısal

    Eğer sourceExpr :

    • 0: Sonuç şudur false.

      Aksi takdirde, sonuç şeklindedir true.

  • DİZGİ

    Eğer 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ı başka bir forma dönüştürmek için try_cast kullanın.

  • VARYANT

    Gerçek değerin VARIANT tipi kuralları uygulanır.

Ö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

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

İKİLİ

targetType bir BINARY ise ve sourceExpr türündeyse:

  • BOŞLUK

    Sonuç, NULL türünde bir BINARY.

  • DİZGİ

    Sonuç, surceExpr öğesinin UTF-8 kodlamasıdır.

  • VARYANT

    Veri türü tarafından tutulan gerçek değer için VARIANT tür kuralları geçerlidir.

Örnekler

> 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

DİZİ

targetType bir ARRAY < hedefElemanTürü > ise ve sourceExpr türündeyse:

  • BOŞLUK

    Sonuç, NULL öğesinin bir targeType sonucudur.

  • ARRAY < sourceElementType >

    sourceElementType'dan targetElementType'e dönüştürme destekleniyorsa, sonuç, tüm öğelerinin ARRAY<targetElementType>'e dönüştürüldüğü bir targetElementType olur.

    Azure Databricks, dönüştürme desteklenmiyorsa veya öğelerden herhangi biri dönüştürülemezse bir hata oluşturur.

    try_cast kullanarak geçersiz verileri veya taşma hatalarını NULL'e dönüştürün.

  • VARYANT

    Veri türü tarafından tutulan gerçek değer için VARIANT tür kuralları geçerlidir.

Ö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.

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

HARİTA

Eğer targetType, bir MAP < hedefAnahtarTürü, hedefDeğerTürü > ise ve sourceExpr, türü:

  • BOŞLUK

    Sonuç, NULL öğesinin bir targetType sonucudur.

  • MAP <kaynakAnahtarTürü, kaynakDeğerTürü >

    Eğer sourceKeyTypetargetKeyType 'e ve sourceValueTypetargetValueType 'e dönüştürmeler destekleniyorsa, sonuç, tüm anahtarların MAP<targetKeyType, targetValueType> türüne ve tüm değerlerin targetKeyType türüne dönüştürüldüğü bir targetValueType olacaktır.

    Azure Databricks, dönüştürme desteklenmiyorsa veya anahtarların veya değerlerin herhangi biri dönüştürülemezse bir hata verir.

    try_cast kullanarak geçersiz verileri veya taşma hatalarını NULL'e dönüştürün.

  • VARYANT

    Veri türü tarafından tutulan gerçek değer için VARIANT tür kuralları geçerlidir.

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

    Her sourceFieldName, STRING olarak dönüştürülür ve targetKeyType atanarak bir eşleme anahtarına dönüştürülür. Her kaynak alanı değeri sourceFieldType, dönüştürülür ve targetValueType ile ilgili eşleme değerine eşlenir.

    Azure Databricks, herhangi bir dönüşüm desteklenmiyorsa veya alan değerleri veya anahtar değerleri dönüştürülemezse bir hata oluşturur.

    try_cast kullanarak geçersiz verileri veya taşma hatalarını NULL'e dönüştürü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.

-- 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}

yapı

bir STRUCT [targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, …]] ise ve türündeyse:

  • BOŞLUK

    Sonuç, NULL öğesinin bir targetType sonucudur.

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

    sourceExpr, bu koşulların tümü doğruysa, targetType olarak ayarlanabilir.

    • Kaynak türü, hedefle aynı sayıda alana sahiptir
    • Tüm alanlar için: sourceFieldTypeN öğesi targetFieldTypeN türüne dönüştürülebilir.
    • Tüm alan değerleri için: N kaynak alan değeri olarak targetFieldTypeN atanabilir ve hedef alan N olarak NOT NULLişaretlenirse değer null değildir.

    sourceFieldName'lar, kaynak NOT NULL kısıtlamaları ve kaynak COMMENT'lar targetType ile eşleşmek zorunda değildir ve yok sayılırlar.

    Azure Databricks, dönüştürme desteklenmiyorsa veya alanlardan herhangi biri dönüştürülemezse hata verir.

    try_cast kullanarak geçersiz verileri veya taşma hatalarını NULL'e dönüştürün.

  • VARYANT

    Veri türü tarafından tutulan gerçek değer için VARIANT tür kuralları geçerlidir.

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

    Tüm sourceFieldName'ler sourceFieldName'lerle eşleştirilir. Her bir kaynak alan değeri sourceFieldType, eşleştirilmiş olan targetValueType'e dönüştürülür ve ilgili eşleme değerine haritalanır.

    ile targetFieldName eşleşmezse, alan değeri olur NULL.

    Eğer sourceFieldName eşleştirilmemişse, alan yoksayılır.

    Azure Databricks, herhangi bir dönüşüm desteklenmiyorsa veya alan değerleri veya anahtar değerleri dönüştürülemezse bir hata oluşturur.

    try_cast kullanarak geçersiz verileri veya taşma hatalarını NULL'e dönüştürün.

Örnekler

> 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: 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

> 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"}

VARYANT

targetType, bir VARIANT ise ve sourceExpr şu türden biriyse:

  • BOŞLUK

    Sonuç, NULL türünde bir VARIANT.

  • Sayısal

    Sonuç, sayısal değeri temsil eden bir VARIANTdeğeridir. DECIMAL türlerin hassasiyeti <= 38 olmalıdır.

    Tüm tam sayılar BIGINT ile eşlenmiştir.

    Tüm DECIMAL değerler en düşük hassasiyet ve ölçekle eşlenir.

  • DİZGİ

    Sonuç, VARIANT değerini temsil eden bir STRING'dir.

  • TARİH

    Sonuç, VARIANT değerini temsil eden bir DATE'dir.

  • ZAMAN DAMGASI

    Sonuç, VARIANT değerini temsil eden bir TIMESTAMP'dir.

  • TIMESTAMP_NTZ

    Sonuç, VARIANT değerini temsil eden bir TIMESTAMP NTZ'dir.

  • BOOLEAN

    Sonuç, VARIANT değerini temsil eden bir BOOLEAN'dir.

  • İKİLİ

    Sonuç, VARIANT değerini temsil eden bir BINARY'dir.

  • ARRAY < sourceElementType >

    sourceElementType türünden VARIANT türüne dönüşüm destekleniyorsa, sonuç VARIANT, ARRAY<sourceElementType>'ü temsil eder.

    Azure Databricks, dönüşüm desteklenmiyorsa hata verir.

    try_cast kullanarak geçersiz verileri veya taşma hatalarını NULL'e dönüştürün.

Örnekler

> SELECT cast(NULL AS VARIANT);
  NULL

> SELECT cast(5.1000 AS VARIANT);
  5.1

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