投年代pan>
函數
適用於:年代trong>磚的SQL磚運行時
強製轉換值expr年代pan>
到目標數據類型類型年代pan>
.
返回
結果為targetType年代pan>
.
以下數據類型轉換的組合是有效的:
源(行)目標(列) |
||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
|
N |
Y |
Y |
N |
Y |
Y |
Y |
Y |
N |
N |
N |
N |
|
N |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
N |
N |
N |
|
N |
N |
Y |
Y |
Y |
N |
N |
N |
N |
N |
N |
N |
|
N |
Y |
Y |
Y |
Y |
N |
N |
N |
N |
N |
N |
N |
|
N |
Y |
Y |
N |
N |
Y |
N |
N |
N |
N |
N |
N |
|
N |
Y |
Y |
N |
N |
N |
Y |
N |
N |
N |
N |
N |
|
N |
Y |
Y |
N |
Y |
N |
N |
Y |
N |
N |
N |
N |
|
N |
Y |
Y |
N |
N |
N |
N |
N |
Y |
N |
N |
N |
|
N |
N |
Y |
N |
N |
N |
N |
N |
N |
Y |
N |
N |
|
N |
N |
Y |
N |
N |
N |
N |
N |
N |
N |
Y |
N |
|
N |
N |
Y |
N |
N |
N |
N |
N |
N |
N |
N |
Y |
基於targetType的規則和限製
警告
在Databricks運行時中,如果spark.sql.ansi.enabled年代pan>是假年代pan>
,溢出不會導致錯誤,而是會“包裝”結果。
一個sourceExpr年代pan>
值的格式無效或無效字符targetType年代pan>
會導致零年代pan>
.
數字
如果targetType年代pan>
是一個數字年代pan>而且sourceExpr年代pan>
類型:
結果是指定數值類型的NULL。
如果
targetType年代pan>
是一個積分數值年代pan>,結果是sourceExpr年代pan>
截斷年代trong>到一個整數。否則,結果是
sourceExpr年代pan>
圓形的年代trong>以適合現有的規模targetType年代pan>
.的取值範圍之外
targetType年代pan>
,將引發溢出錯誤。使用try_cast年代pan>將溢出錯誤轉換為
零年代pan>
.sourceExpr年代pan>
的字麵值被讀取targetType年代pan>
.如果
sourceExpr年代pan>
不符合文字值的格式,將引發錯誤。參數的取值範圍之外
targetType年代pan>
,將引發溢出錯誤。使用try_cast年代pan>將溢出和無效的格式錯誤轉換為
零年代pan>
.結果是間隔的秒數
1970-01-01年代pan>00:00:00年代pan>UTC年代pan>
而且sourceExpr年代pan>
.如果
targetType年代pan>
是一個積分數值年代pan>,結果是<年代trong>截斷年代trong>到一個整數。否則,結果是<年代trong>圓形的年代trong>以適合現有的規模
targetType年代pan>
.的範圍外
targetType年代pan>
,將引發溢出錯誤。使用try_cast年代pan>將溢出錯誤轉換為
零年代pan>
.適用於:年代trong>磚的SQLSQL倉庫版本2022.35年代pan>或更高版本Databricks Runtime 11.2及以上版本
目標類型必須為確切的數字年代pan>.
給定一個
時間間隔年代pan>upper_unit年代pan>來年代pan>lower_unit年代pan>
結果是用總數來衡量的lower_unit年代pan>
.如果lower_unit年代pan>
是第二個年代pan>
,小數秒存儲在小數點的右邊。對於所有其他區間,結果總是一個整數。如果
sourceExpr年代pan>
是:真正的年代pan>
:結果為0。假年代pan>
:結果為1。零年代pan>
:結果是零年代pan>
.
例子
>年代pan>選擇年代pan>投年代pan>(年代pan>零年代pan>作為年代pan>INT年代pan>);年代pan>零年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>5年代pan>.年代pan>6年代pan>作為年代pan>INT年代pan>);年代pan>5年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>5年代pan>.年代pan>6年代pan>作為年代pan>小數年代pan>(年代pan>2年代pan>,年代pan>0年代pan>));年代pan>6年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>-年代pan>5年代pan>.年代pan>6年代pan>作為年代pan>INT年代pan>);年代pan>-年代pan>5年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>-年代pan>5年代pan>.年代pan>6年代pan>作為年代pan>小數年代pan>(年代pan>2年代pan>,年代pan>0年代pan>));年代pan>-年代pan>6年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>128年代pan>作為年代pan>非常小的整數年代pan>);年代pan>溢出年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>128年代pan>作為年代pan>小數年代pan>(年代pan>2年代pan>,年代pan>0年代pan>));年代pan>溢出年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>“123”年代pan>作為年代pan>INT年代pan>);年代pan>123年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>“123.0”年代pan>作為年代pan>INT年代pan>);年代pan>無效的年代pan>格式年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>時間戳年代pan>“1970-01-01 00:00:01”年代pan>作為年代pan>長年代pan>);年代pan>1年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>時間戳年代pan>“1970-01-01 00:00:00.000001”年代pan>作為年代pan>雙年代pan>);年代pan>1年代pan>.年代pan>0年代pan>E年代pan>-年代pan>6年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>時間戳年代pan>“2022-02-01”就是年代pan>作為年代pan>短整型年代pan>);年代pan>錯誤年代pan>:年代pan>溢出年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>真正的年代pan>作為年代pan>布爾年代pan>);年代pan>1年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>時間間隔年代pan>“1 - 2”年代pan>一年年代pan>來年代pan>月年代pan>作為年代pan>整數年代pan>);年代pan>14年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>時間間隔年代pan>“1:30.5”年代pan>一分鍾年代pan>來年代pan>第二個年代pan>作為年代pan>小數年代pan>(年代pan>5年代pan>,年代pan>2年代pan>));年代pan>90年代pan>.年代pan>50年代pan>
字符串
如果targetType年代pan>
是一個字符串類型年代pan>而且sourceExpr年代pan>
類型:
結果是一個NULL字符串。
結果是字麵數帶有一個可選的負號,並且除了小數點左邊的個位以外沒有前導零。如果
targetType年代pan>
是小數(p,年代pan>s)年代pan>
與年代年代pan>
大於0則加小數點,後麵的0按比例加起來。如果絕對數字小於
10000000年年代pan>
大於或等於0.001年代pan>
在美國,計算結果不用科學記數法表示,小數點兩邊至少有一位數字。否則Databricks使用尾數,後麵跟著
E年代pan>
還有一個指數。尾數有一個可選的前導負號,後麵是小數點左邊的一位數字,右邊是大於零的最小位數。指數有一個可選的前導負號。如果年份在公元前9999年到公元9999年之間,則結果為adateString年代pan>形式的
-YYYY-MM-DD年代pan>
而且YYYY-MM-DD年代pan>
分別。對於在此範圍之前或之後的年份,將必要的位數添加到年份組件和
+年代pan>
用於CE。如果年份在公元前9999年到公元9999年之間,則結果為atimestampString年代pan>形式的
-YYYY-MM-DD年代pan>hh: mm: ss年代pan>
而且YYYY-MM-DD年代pan>hh: mm: ss年代pan>
分別。對於在此範圍之前或之後的年份,將必要的位數添加到年份組件和
+年代pan>
用於CE。分數秒
.f……年代pan>
在必要時添加。的最短表示間隔文字年代pan>.如果區間為負數,則符號嵌入到
interval-string年代pan>
.對於小於10的單位,省略前導零。典型的年-月間隔字符串的形式為:
時間間隔年代pan>“Y”年代pan>一年年代pan>
時間間隔年代pan>“y m”年代pan>一年年代pan>來年代pan>月年代pan>
時間間隔年代pan>“米”年代pan>月年代pan>
的最短表示間隔文字年代pan>.如果區間為負數,則符號嵌入到
interval-string年代pan>
.對於小於10的單位,省略前導零。典型的日時間間隔字符串形式為:
時間間隔年代pan>' D '年代pan>一天年代pan>
時間間隔年代pan>' D年代pan>h”年代pan>一天年代pan>來年代pan>小時年代pan>
時間間隔年代pan>' D年代pan>h: m”年代pan>一天年代pan>來年代pan>一分鍾年代pan>
時間間隔年代pan>' D年代pan>h: m:年代年代pan>一天年代pan>來年代pan>第二個年代pan>
時間間隔年代pan>“h”年代pan>小時年代pan>
時間間隔年代pan>“h: m”年代pan>小時年代pan>來年代pan>一分鍾年代pan>
時間間隔年代pan>m:年代”年代pan>一分鍾年代pan>來年代pan>第二個年代pan>
時間間隔年代pan>“年代”年代pan>第二個年代pan>
的結果
真正的年代pan>
boolean是STRING字麵量真正的年代pan>
,因為假年代pan>
它是STRING字麵量假年代pan>
,和零年代pan>
它是NULL字符串。結果就是二進製
sourceExpr年代pan>
解釋為UTF-8字符序列。Databricks不驗證UTF-8字符。來自
二進製年代pan>
來字符串年代pan>
永遠不會注入替換字符或引發錯誤。結果是一個用逗號分隔的強製轉換元素列表,用方括號括起來
[年代pan>]年代pan>
.每個逗號後麵有一個空格。一個零年代pan>
元素被翻譯為字麵量零年代pan>
.Databricks不引用或標記單個元素,這些元素本身可能包含括號或逗號。
結果是一個用逗號分隔的強製轉換鍵值對列表,其中用花括號括起來
{年代pan>}年代pan>
.每個逗號後麵有一個空格。每個鍵值對之間用a隔開->年代pan>
.一個零年代pan>
映射值被翻譯成文字零年代pan>
.Databricks不引用或標記單個鍵或值,這些鍵或值本身可能包含花括號、逗號或
->年代pan>
.結果是一個用逗號分隔的強製轉換字段值列表,用花括號括起來
{年代pan>}年代pan>
.每個逗號後麵有一個空格。一個零年代pan>
字段值被轉換為字麵量零年代pan>
.Databricks不引用或標記單個字段值,這些字段值本身可能包含花括號或逗號。
例子
SELECT (NULL AS STRING);SELECT (-3Y AS STRING);-3 > SELECT (5::DECIMAL(10,5) AS STRING);SELECT (12345678e-4 AS STRING);> SELECT cast(1e7 as string);1.e7 > SELECT cast(1e6 as string);> SELECT cast(1 -4 as string);> SELECT cast(1e-3 as string);SELECT cast(12345678e7);1.2345678E14 > SELECT (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(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); {}
日期
如果targetType年代pan>
是一個日期類型年代pan>而且sourceExpr年代pan>
類型:
結果是一個NULL DATE。
sourceExpr年代pan>
必須是有效的dateString年代pan>.如果
sourceExpr年代pan>
是無效的dateString年代pan>
, Databricks返回錯誤。使用try_cast年代pan>將無效的數據錯誤轉換為
零年代pan>
.結果是時間戳的日期部分
sourceExpr年代pan>
.
例子
>年代pan>選擇年代pan>投年代pan>(年代pan>零年代pan>作為年代pan>日期年代pan>);年代pan>零年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>“1900-10-01”年代pan>作為年代pan>日期年代pan>);年代pan>1900年代pan>-年代pan>10年代pan>-年代pan>01年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>“1900-10-01”年代pan>作為年代pan>日期年代pan>);年代pan>1900年代pan>-年代pan>10年代pan>-年代pan>01年代pan>——沒有2月30日。年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>“1900-02-30”年代pan>作為年代pan>日期年代pan>);年代pan>錯誤年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>時間戳年代pan>“1900-10-01 12:13:14”年代pan>作為年代pan>日期年代pan>);年代pan>1900年代pan>-年代pan>10年代pan>-年代pan>01年代pan>
時間戳
如果targetType年代pan>
是一個時間戳類型年代pan>而且sourceExpr年代pan>
類型:
結果是一個NULL DATE。
sourceExpr年代pan>
被讀取為秒數1970-01-01年代pan>00:00:00年代pan>UTC年代pan>
.小於微秒的分數被截斷。
的取值範圍之外
時間戳年代pan>
,將引發溢出錯誤。使用try_cast年代pan>將溢出錯誤轉換為
零年代pan>
.sourceExpr年代pan>
必須是有效的timestampString年代pan>.如果
sourceExpr年代pan>
是無效的timestampString年代pan>
, Databricks返回錯誤。使用try_cast年代pan>將無效的數據錯誤轉換為
零年代pan>
.結果是
sourceExpr年代pan>
日期在00:00:00年代pan>
小時。
例子
>年代pan>選擇年代pan>投年代pan>(年代pan>零年代pan>作為年代pan>時間戳年代pan>);年代pan>零年代pan>>年代pan>集年代pan>時間年代pan>區年代pan>“+ 00:00”年代pan>;年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>0年代pan>.年代pan>0年代pan>作為年代pan>時間戳年代pan>);年代pan>1970年代pan>-年代pan>01年代pan>-年代pan>01年代pan>00年代pan>:年代pan>00年代pan>:年代pan>00年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>0年代pan>.年代pan>0000009年代pan>作為年代pan>時間戳年代pan>);年代pan>1970年代pan>-年代pan>01年代pan>-年代pan>01年代pan>00年代pan>:年代pan>00年代pan>:年代pan>00年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>1年代pan>e20年代pan>作為年代pan>時間戳年代pan>);年代pan>錯誤年代pan>:年代pan>溢出年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>“1900”年代pan>作為年代pan>時間戳年代pan>);年代pan>1900年代pan>-年代pan>01年代pan>-年代pan>01年代pan>00年代pan>:年代pan>00年代pan>:年代pan>00年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>“1900-10-01 12:13:14”年代pan>作為年代pan>時間戳年代pan>);年代pan>1900年代pan>-年代pan>10年代pan>-年代pan>01年代pan>12年代pan>:年代pan>13年代pan>:年代pan>14年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>“1900-02-30 12:13:14”年代pan>作為年代pan>時間戳年代pan>);年代pan>錯誤年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>日期年代pan>“1900-10-01”年代pan>作為年代pan>時間戳年代pan>);年代pan>1900年代pan>-年代pan>10年代pan>-年代pan>01年代pan>00年代pan>:年代pan>00年代pan>:年代pan>00年代pan>
year-month間隔
如果targetType年代pan>
是一個year-month間隔年代pan>而且sourceExpr年代pan>
類型:
結果是NULL年-月間隔。
適用於:年代trong>磚的SQLSQL倉庫版本2022.35年代pan>或更高版本Databricks Runtime 11.2及以上版本
的較低單位的數目
targetType年代pan>
yearmonthIntervalQualifier年代pan>.sourceExpr年代pan>
必須是有效的yearMonthIntervalString年代pan>.如果
sourceExpr年代pan>
是無效的yearMonthIntervalString年代pan>
, Databricks返回錯誤。使用try_cast年代pan>將無效的數據錯誤轉換為
零年代pan>
.如果
targetType年代pan>
yearMonthIntervalQualifier年代pan>包括月年代pan>
該值保持不變,但被重新解釋以匹配目標類型。否則,如果源類型為yearMonthIntervalQualifier年代pan>包括
月年代pan>
,結果被截斷為完整的年份。
例子
>年代pan>選擇年代pan>投年代pan>(年代pan>零年代pan>作為年代pan>時間間隔年代pan>一年年代pan>);年代pan>零年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>“1 - 4”年代pan>作為年代pan>時間間隔年代pan>一年年代pan>來年代pan>月年代pan>)::年代pan>字符串年代pan>;年代pan>時間間隔年代pan>“1 - 4”年代pan>一年年代pan>來年代pan>月年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>' 1 '年代pan>作為年代pan>時間間隔年代pan>一年年代pan>來年代pan>月年代pan>);年代pan>錯誤年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>時間間隔年代pan>“1 - 4”年代pan>一年年代pan>來年代pan>月年代pan>作為年代pan>時間間隔年代pan>月年代pan>)::年代pan>字符串年代pan>;年代pan>時間間隔年代pan>“16”年代pan>月年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>14年代pan>作為年代pan>時間間隔年代pan>一年年代pan>來年代pan>月年代pan>)::年代pan>字符串年代pan>;年代pan>時間間隔年代pan>“1 - 2”年代pan>一年年代pan>來年代pan>月年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>時間間隔年代pan>1 - 11的年代pan>一年年代pan>來年代pan>月年代pan>作為年代pan>時間間隔年代pan>一年年代pan>)::年代pan>字符串年代pan>;年代pan>時間間隔年代pan>' 1 '年代pan>一年年代pan>
白天的時間間隔
如果targetType年代pan>
是一個白天的時間間隔年代pan>而且sourceExpr年代pan>
類型:
結果是一個NULL日-時間間隔。
適用於:年代trong>磚的SQLSQL倉庫版本2022.35年代pan>或更高版本Databricks Runtime 11.2及以上版本
的較低單位的數目
targetType年代pan>
dayTimeIntervalQualifier年代pan>.如果單位是第二個年代pan>
任何分數都被解釋為分數秒。sourceExpr年代pan>
必須是有效的dayTimeIntervalString年代pan>.如果
sourceExpr年代pan>
是無效的dayTimeIntervalString年代pan>
, Databricks返回錯誤。使用try_cast年代pan>將無效的數據錯誤轉換為
零年代pan>
.如果
targetType年代pan>
dayTimeIntervalQualifier年代pan>包含源類型的最小單元dayTimeIntervalQualifier年代pan>,該值保持不變,但會被重新解釋以匹配目標類型。否則,
sourceExpr年代pan>
時間間隔被截斷以適合targetType年代pan>
.
>年代pan>選擇年代pan>投年代pan>(年代pan>零年代pan>作為年代pan>時間間隔年代pan>小時年代pan>);年代pan>零年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>“1 23”年代pan>作為年代pan>時間間隔年代pan>一天年代pan>來年代pan>一分鍾年代pan>)::年代pan>字符串年代pan>;年代pan>時間間隔年代pan>“1 04:23”年代pan>一天年代pan>來年代pan>一分鍾年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>' 1 '年代pan>作為年代pan>時間間隔年代pan>一天年代pan>來年代pan>一分鍾年代pan>);年代pan>錯誤年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>時間間隔年代pan>“1 23”年代pan>一天年代pan>來年代pan>一分鍾年代pan>作為年代pan>時間間隔年代pan>一分鍾年代pan>)::年代pan>字符串年代pan>;年代pan>時間間隔年代pan>“1703”年代pan>一分鍾年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>時間間隔年代pan>“1 23”年代pan>一天年代pan>來年代pan>一分鍾年代pan>作為年代pan>時間間隔年代pan>小時年代pan>)::年代pan>字符串年代pan>;年代pan>時間間隔年代pan>“28”年代pan>小時年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>125年代pan>.年代pan>3.年代pan>作為年代pan>時間間隔年代pan>一分鍾年代pan>來年代pan>第二個年代pan>)::年代pan>字符串年代pan>;年代pan>時間間隔年代pan>“2:5.3”年代pan>一分鍾年代pan>來年代pan>第二個年代pan>
布爾
如果targetType年代pan>
是一個布爾年代pan>而且sourceExpr年代pan>
類型:
結果是一個NULL布爾值。
如果
sourceExpr年代pan>
是:0年代pan>
:結果是假年代pan>
.零年代pan>
:結果是零年代pan>
.“特殊浮點值”年代pan>:結果是
真正的年代pan>
.
否則,結果是
真正的年代pan>
.
如果
sourcEexpr年代pan>
是(不區分大小寫):“T”,年代pan>“真正的”,年代pan>“Y”,年代pan>“是的”,年代pan>或年代pan>' 1 '年代pan>
:結果是真正的年代pan>
“F”,年代pan>“假”,年代pan>“N”,年代pan>“不”,年代pan>或年代pan>' 0 '年代pan>
:結果是假年代pan>
零年代pan>
:結果是零年代pan>
否則,Databricks將為類型布爾錯誤返回無效的輸入語法。
使用try_cast年代pan>將無效的數據錯誤轉換為
零年代pan>
.
例子
>年代pan>選擇年代pan>投年代pan>(年代pan>零年代pan>作為年代pan>布爾年代pan>);年代pan>零年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>“T”年代pan>作為年代pan>布爾年代pan>);年代pan>真正的年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>“真正的”年代pan>作為年代pan>布爾年代pan>);年代pan>真正的年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>' 1 '年代pan>作為年代pan>布爾年代pan>);年代pan>真正的年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>' 0 '年代pan>作為年代pan>布爾年代pan>);年代pan>假年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>“n”年代pan>作為年代pan>布爾年代pan>);年代pan>假年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>“上”年代pan>作為年代pan>布爾年代pan>);年代pan>錯誤年代pan>:年代pan>無效的年代pan>輸入年代pan>語法年代pan>為年代pan>類型年代pan>布爾年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>0年代pan>作為年代pan>布爾年代pan>);年代pan>假年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>0年代pan>.年代pan>0年代pan>E10汽油年代pan>作為年代pan>布爾年代pan>);年代pan>假年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>1年代pan>作為年代pan>布爾年代pan>);年代pan>真正的年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>0年代pan>.年代pan>1年代pan>作為年代pan>布爾年代pan>);年代pan>真正的年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>“南”年代pan>::年代pan>浮動年代pan>作為年代pan>布爾年代pan>);年代pan>真正的年代pan>
二進製
如果targetType年代pan>
是一個二進製年代pan>而且sourceExpr年代pan>
類型:
數組
如果targetType年代pan>
是一個數組< targetElementType >年代pan>而且sourceExpr年代pan>
類型:
的NULL值
targeType年代pan>
.如果演員從
sourceElementType年代pan>
來targetElementType年代pan>
,則結果為數組< targetElementType >年代pan>
將所有元素轉換為targetElementType年代pan>
.如果不支持強製轉換,或者任何元素不能進行強製轉換,Databricks將拋出錯誤。
使用try_cast年代pan>將無效數據或溢出錯誤轉換為
零年代pan>
.
例子
>年代pan>選擇年代pan>投年代pan>(年代pan>零年代pan>作為年代pan>數組年代pan><年代pan>INT年代pan>>年代pan>);年代pan>零年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>數組年代pan>(年代pan>“t”年代pan>,年代pan>“f”年代pan>,年代pan>零年代pan>)年代pan>作為年代pan>數組年代pan><年代pan>布爾年代pan>>年代pan>);年代pan>[年代pan>真正的年代pan>,年代pan>假年代pan>,年代pan>零年代pan>]年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>數組年代pan>(年代pan>“t”年代pan>,年代pan>“f”年代pan>,年代pan>零年代pan>)年代pan>作為年代pan>時間間隔年代pan>一年年代pan>);年代pan>錯誤年代pan>:年代pan>不能年代pan>投年代pan>數組年代pan><年代pan>字符串年代pan>>年代pan>來年代pan>時間間隔年代pan>一年年代pan>>年代pan>選擇年代pan>投年代pan>(年代pan>數組年代pan>(年代pan>“t”年代pan>,年代pan>“f”年代pan>,年代pan>“o”年代pan>)年代pan>作為年代pan>數組年代pan><年代pan>布爾年代pan>>年代pan>);年代pan>錯誤年代pan>:年代pan>無效的年代pan>輸入年代pan>語法年代pan>為年代pan>類型年代pan>布爾年代pan>:年代pan>o年代pan>.年代pan>
地圖
如果targetType年代pan>
是一個MAP < targetKeyType, targetValueType >年代pan>而且sourceExpr年代pan>
類型:
的NULL值
targetType年代pan>
.MAP < sourceKeyType, sourceValueType >年代pan>
如果從
sourceKeyType年代pan>
來targetKeyType年代pan>
而且sourceValueType年代pan>
來targetValueType年代pan>
,則結果為MAP < targetKeyType,年代pan>targetValueType >年代pan>
所有鍵都轉換為targetKeyType年代pan>
和所有值轉換為targetValueType年代pan>
.如果不支持強製轉換,或者任何鍵或值不能強製轉換,Databricks將拋出錯誤。
使用try_cast年代pan>將無效數據或溢出錯誤轉換為
零年代pan>
.
結構體
如果targetType年代pan>
是一個STRUCT<[targetFieldName:targetFieldType [NOT NULL][COMMENT str][,…]]>年代pan>而且sourceExpr年代pan>
類型:
的NULL值
targetType年代pan>
.STRUCT<[sourceFieldName:sourceFieldType [NOT NULL][COMMENT str][,…]]>年代pan>
的
sourceExpr年代pan>
可以轉換為targetType年代pan>
如果所有這些條件都成立:源類型具有與目標相同的字段數量
對於所有字段:
sourceFieldTypeN年代pan>
能投到嗎targetFieldTypeN年代pan>
.對於所有字段值:源字段值N可以強製轉換為
targetFieldTypeN年代pan>
如果目標字段N被標記為,則該值不為空不年代pan>零年代pan>
.
sourceFieldName年代pan>
年代,源不年代pan>零年代pan>
約束和來源評論年代pan>
S不需要匹配targetType年代pan>
被忽視。如果不支持強製轉換,或者任何鍵或值不能強製轉換,Databricks將拋出錯誤。
使用try_cast年代pan>將無效數據或溢出錯誤轉換為
零年代pan>
.
例子
SELECT (NULL AS STRUCT);NULL > SELECT cast(named_struct('a', 't', 'b', '1900') AS STRUCT);{"b":true,"c":1900-01-01} > SELECT cast(named_struct('a', 't', 'b', NULL::DATE) AS STRUCT);error: cannot cast struct to struct > SELECT cast(named_struct('a', 't', 'b', '1900') AS struct>);SELECT cast(named_struct('a', 't', 'b', 'hello') AS struct);錯誤:不能將hello轉換為DateType