SQL數據類型規則(Databricks SQL)<一個class="headerlink" href="//www.eheci.com/docs/sql/language-manual/#sql-data-type-rules-databricks-sql" title="">
Databricks SQL使用多個規則來解決數據類型之間的衝突:
您還可以在多種類型之間明確施放:
鑄件功能大多數類型之間的鑄造,如果不能,則返回錯誤。
try_cast功能像<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/functions/cast.html">鑄件功能但是當通過無效值時返回null。
其他<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/sql-ref-functions-builtin.html">內置功能使用提供格式指令的類型之間的鑄造。
類型促銷<一個class="headerlink" href="//www.eheci.com/docs/sql/language-manual/#type-promotion" title="">
類型促銷是將類型施放到另一種類型的同一類型家族中的過程,該家族包含原始類型的所有可能值。因此,類型促銷是一個安全的操作。例如微小
從-128
至127
。它所有可能的價值都可以安全地晉升為整數
。
類型優先列表<一個class="headerlink" href="//www.eheci.com/docs/sql/language-manual/#type-precedence-list" title="">
這<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#type-precedence-list">類型優先列表定義是否可以將給定數據類型的值隱式升級為另一種數據類型。
數據類型 |
優先列表(從最狹窄到最寬) |
---|---|
tinyint-> smallint-> int-> bigint->十進製 - > float<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#1">(1)- >雙 |
|
smallint-> int-> bigint->小數 - > float<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#1">(1)- >雙 |
|
int-> bigint->十進製 - > float<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#1">(1)- >雙 |
|
bigint->十進製 - > float<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#1">(1)- >雙 |
|
小數 - >浮子<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#1">(1)- >雙 |
|
漂浮<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#1">(1)- >雙 |
|
雙倍的 |
|
日期 - >時間戳 |
|
時間戳 |
|
大批<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#2">(2) |
|
二進製 |
|
布爾 |
|
間隔 |
|
地圖<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#2">(2) |
|
細繩 |
|
結構<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#2">(2) |
(1)對於至少常見的類型分辨率,浮點被跳過以避免喪失精度。
(2)對於複雜類型,優先規則遞歸地適用於其組件元素。
弦和空<一個class="headerlink" href="//www.eheci.com/docs/sql/language-manual/#strings-and-null" title="">
特殊規則適用細繩
並沒有類型無效的
:
無效的
可以晉升為任何其他類型。細繩
可以晉升為bigint
,,,,二進製
,,,,布爾
,,,,日期
,,,,雙倍的
,,,,間隔
, 和時間戳
。如果實際的字符串值無法施放至至少通用類型的數據鏈球核克,則SQL會引起運行時錯誤。晉升間隔
字符串值必須匹配間隔單元。
類型優先圖<一個class="headerlink" href="//www.eheci.com/docs/sql/language-manual/#type-precedence-graph" title="">
這是對優先級層次結構的圖形描述,結合了<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#type-precedence-list">類型優先列表和<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#strings-and-null">字符串和無效規則。
最少常見的類型分辨率<一個class="headerlink" href="//www.eheci.com/docs/sql/language-manual/#least-common-type-resolution" title="">
一組類型的最不常見類型是可從最狹窄的類型<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#type-precedence-graph">類型優先圖根據一組類型的所有元素。
最少常見的類型分辨率用於:
確定是否可以使用較窄類型的參數調用期望給定類型的參數的函數。
得出一個期望多個參數的共享參數類型的函數的參數類型,例如<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/functions/coalesce.html">合並,,,,<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/functions/in.html">在,,,,<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/functions/least.html">至少, 或者<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/functions/greatest.html">最偉大。
為操作員提供操作數類型,例如算術操作或比較。
得出表達式的結果類型,例如<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/functions/case.html">案例表達。
得出元素,密鑰或值類型<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/functions/array.html">大批和<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/functions/map.html">地圖構造函數。
得出結果類型<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/sql-ref-syntax-qry-select-setops.html">聯合,相交或除外設置運算符。
如果最小普通類型解決到漂浮
。如果任何貢獻類型都是確切的數字類型(微小
,,,,小網
,,,,整數
,,,,bigint
, 或者小數
)最不常見的類型被推到雙倍的
避免潛在的數字丟失。
隱式沮喪和盤子<一個class="headerlink" href="//www.eheci.com/docs/sql/language-manual/#implicit-downcasting-and-crosscasting" title="">
Databricks SQL僅在功能和操作員調用上采用這些形式的隱式鑄造形式,並且隻有在可以明確確定意圖的情況下。
隱性沮喪
隱式降落器會自動將更寬的類型鑄造為較窄的類型,而無需您明確指定鑄件。沮喪是方便的,但是如果實際值無法在狹窄類型中表示,則會承受意外運行時錯誤的風險。
沮喪適用<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#type-precedence-list">類型優先列表以相反的順序。
隱式交叉廣播
隱式交叉廣播將一個從一種類型的家族到另一個家庭的值,而無需您明確指定演員表。
Databricks SQL支持:
任何簡單的類型,除了
二進製
, 至細繩
。一個
細繩
任何簡單類型。
施放功能調用<一個class="headerlink" href="//www.eheci.com/docs/sql/language-manual/#casting-on-function-invocation" title="">
給定一個已解決的函數或操作員,以下規則按照列出的順序適用每個參數和參數對:
如果支持的參數類型是參數的一部分<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#type-precedence-graph">類型優先圖,Databricks SQL<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#type-promotion">促進該參數類型的參數。
在大多數情況下,功能描述明確說明了受支持的類型或鏈條,例如“任何數字類型”。
例如,<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/functions/sin.html">罪(expr)操作
雙倍的
但會接受任何數字。如果預期參數類型是
細繩
該參數是一個簡單的類型數據鏈球協議SQL<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#crosscasting">交叉廣播字符串參數類型的參數。例如,<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/functions/substr.html">基德(str,start,len)期望
str
成為一個細繩
。相反,您可以傳遞數字或DateTime類型。如果參數類型是
細繩
預期參數類型是一種簡單的類型,Databricks SQL<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#crosscasting">交叉廣播字符串參數為最寬的支持參數類型。例如,<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/functions/date_add.html">date_add(日期,天)期望
日期
和整數
。如果您調用
date_add()
有兩個細繩
S,Databricks SQL<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#crosscasting">交叉廣播首先細繩
至日期
第二細繩
到一個整數
。如果該函數期望的數字類型,例如
整數
,或日期
類型,但該論點是一種更通用的類型,例如雙倍的
或者時間戳
,Databricks SQL隱式<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#downcasting">沮喪該參數類型的參數。例如,<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/functions/date_add.html">date_add(日期,天)期望
日期
和整數
。如果您調用
date_add()
與時間戳
和bigint
,Databricks SQL<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/#downcasting">沮喪這時間戳
至日期
通過刪除時間組件和bigint
到一個整數
。否則,Databricks SQL會引起錯誤。
例子<一個class="headerlink" href="//www.eheci.com/docs/sql/language-manual/#examples" title="">
這<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/functions/coalesce.html">Cocece功能(Databricks SQL)隻要它們共享最少常見的類型,就可以接受任何一組參數類型。
結果類型是參數的最不常見類型。
- 最不常見的tinyint和bigint是bigint>選擇類型((合並((1y,,,,1l,,,,無效的);bigint- 整數和日期不在任何方向上共享優先鏈或支持交叉廣播。>選擇類型((合並((1,,,,日期'2020-01-01');錯誤:不相容類型[[int,,,,日期這是給予的- 兩者都是陣列,元素具有最少常見的類型>選擇類型((合並((大批((1y),大批((1l)))大批<bigint>- int和float的最不常見類型是雙重>選擇類型((合並((1,,,,1F))雙倍的>選擇類型((合並((1l,,,,1F))雙倍的>選擇類型((合並((1BD,,,,1F))雙倍的- INT和String之間最不常見的類型是bigint>選擇類型((合並((5,,,,'6');bigint- 最不常見的類型是一個巨大的,但價值不是巨大的。>選擇合並(('6.1',,,,5);錯誤:6。1是不是一個bigint- 小數和字符串之間最不常見的類型是雙>選擇類型((合並((1BD,,,,'6');雙倍的
這<一個class="reference internal" href="//www.eheci.com/docs/sql/language-manual/functions/substring.html">子字符串功能(Databricks SQL)期望類型的論點細繩
對於字符串和整數
對於開始和長度參數。
- 將Tinyint推廣到整數>選擇基因(('你好',,,,1y,,,,2);他- 沒有鑄造>選擇基因(('你好',,,,1,,,,2);他- 字麵字符串的鑄造>選擇基因(('你好',,,,'1',,,,2);他- 對int的沮喪>選擇基因(('你好',,,,1l,,,,2);他- 從字符串到整數的交叉廣播>選擇基因(('你好',,,,str,,,,2)從值((投擲(('1'作為細繩))作為t((str);他- 從整數到字符串的交叉廣播>選擇基因((12345,,,,2,,,,2);23
||(concat)允許隱式交叉播種。
- 數字被鑄成字符串>選擇“這是一個數字:'||5。4E10;這個是一個數字:5。4E10- 日期被鑄造為字符串>選擇“這是一個日期:'||日期'2021-11-30';這個是一個日期:2021-11-30
date_add可以用時間戳
或者bigint
由於隱式降落。
>選擇date_add((時間戳'2011-11-30 08:30:00',,,,5l);2011-12-05
date_add可以調用細繩
S由於隱式交叉廣播。
>選擇date_add(('2011-11-30 08:30:00',,,,'5');2011-12-05