ANSI_MODE
適用於:磚的SQL
的ANSI_MODE
配置參數控製內置函數的關鍵行為和操作。
本文描述了ANSI模式磚SQL。磚的ANSI合規運行時看到的在磚ANSI的合規運行時。
詳細描述
磚的SQL參考文檔描述SQL標準的行為。
以下部分描述ANSI_MODE之間的區別真正的
(ANSI模式)假
(non-ANSI模式)。
運營商
在non-ANSI模式中,算術運算進行數值類型可能會返回溢出或NULL值,而在ANSI模式這樣的操作返回一個錯誤。
操作符 |
描述 |
例子 |
ANSI_MODE = true |
ANSI_MODE = false |
---|---|---|---|---|
返回股息除以除數。 |
|
錯誤 |
|
|
返回的否定價值expr。 |
|
錯誤 |
|
|
從expr1返回expr2的減法。 |
|
錯誤 |
|
|
返回expr1和expr2的總和。 |
|
錯誤 |
|
|
後返回剩餘股息/除數。 |
|
錯誤 |
|
|
收益乘數乘以被乘數。 |
|
錯誤 |
|
|
返回元素的arrayExpr指數。 |
無效的數組索引 |
錯誤 |
|
|
返回鍵mapExpr的價值。 |
無效的地圖的關鍵 |
錯誤 |
|
|
返回該部門的組成部分因子的股息。 |
|
錯誤 |
|
功能
一些內置函數可以是不同的行為在ANSI模式vs non-ANSI模式條件下指定的下麵。
操作符 |
描述 |
條件 |
ANSI_MODE = true |
ANSI_MODE = false |
---|---|---|---|---|
返回數值的絕對值expr。 |
|
錯誤 |
|
|
返回鍵mapExpr的價值。 |
無效的地圖的關鍵 |
錯誤 |
|
|
返回元素的arrayExpr指數。 |
無效的數組索引 |
錯誤 |
|
|
返回第n個表達式。 |
無效的指數 |
錯誤 |
|
|
創建一個日期的年、月和日。 |
無效的結果日期 |
錯誤 |
|
|
創建一個時間戳字段。 |
無效的結果時間戳 |
錯誤 |
|
|
創建一個區間字段。 |
無效的結果區間 |
錯誤 |
|
|
後返回剩餘股息/除數。 |
|
錯誤 |
|
|
返回後的第一次約會在dayOfWeek比expr和命名。 |
無效的星期 |
錯誤 |
|
|
提取一個url的一部分。 |
無效的URL |
錯誤 |
|
|
返回後積極的剩餘股息/除數。 |
|
錯誤 |
|
|
返回的基數expr。 |
|
|
|
|
返回expr使用一個可選的日期格式。 |
無效的expr或格式字符串 |
錯誤 |
|
|
返回expr使用一個可選的時間戳格式。 |
無效的expr或格式字符串 |
錯誤 |
|
|
返回時間戳在expr UNIX時間戳。 |
無效的expr或格式字符串 |
錯誤 |
|
|
返回當前的UNIX時間戳或指定的時間。 |
無效的expr或格式字符串 |
錯誤 |
|
鑄造的規則
規則和行為以ANSI模式更為嚴格。他們可以分為以下三個類別:
編譯時轉換規則
源類型 |
目標類型 |
例子 |
ANSI_MODE = true |
ANSI_MODE = false |
---|---|---|---|---|
布爾 |
時間戳 |
|
錯誤 |
|
日期 |
布爾 |
|
錯誤 |
|
時間戳 |
布爾 |
|
錯誤 |
|
積分數值 |
二進製 |
|
錯誤 |
二進製表示 |
運行時錯誤
源類型 |
目標類型 |
條件 |
例子 |
ANSI_MODE = true |
ANSI_MODE = false |
---|---|---|---|---|---|
字符串 |
Non-string |
無效的輸入 |
|
錯誤 |
|
數組、結構、地圖 |
數組、結構、地圖 |
無效的輸入 |
|
錯誤 |
|
數字 |
數字 |
溢出 |
|
錯誤 |
|
數字 |
積分數值 |
截斷 |
|
錯誤 |
|
隱式類型強製規則
下ANSI_MODE=真正的
,磚SQL使用清晰SQL數據類型鑄造規則:
相比之下ANSI_MODE=假
不一致和更多的寬容。例如:
當使用一個
字符串
隱式類型與任何算術運算符、字符串是演員雙
。當比較
字符串
任何數值類型的字符串是隱式的類型比較。當執行一個
聯盟
,合並
或其他操作,必須找到最常見類型都投字符串
如果有任何字符串
類型。
例子
>集ansi_mode=真正的;——防止積分數值溢出>選擇投(12345年作為非常小的整數);鑄造12345年來非常小的整數原因溢出——為無效值提出了錯誤,而不是返回NULL。>選擇投(“一個”作為整數);無效的輸入語法為類型數字:一個。來返回零而不是,使用“try_cast”兩種模式——try_cast()是一致的>選擇try_cast(“一個”作為整數);零——不允許模糊crosscasting。>選擇c1+c2從值(“5”,“7.6”)作為T(c1,c2);不能解決”(T。c1+T。c2)'由於來數據類型不匹配:”(T。c1+T。c2)'需要(數字或時間間隔一天來第二個或時間間隔一年來月或時間間隔)類型,不字符串——促進字符串最常見類型(字符串、整數——> BIGINT)算術運算。>選擇typeof(5- - - - - -“3”);長整型數字——促進字符串最常見類型(整數、字符串- - >長整型數字)和運行時檢查>選擇c1=c2從值(10,“10.1”)作為T(c1,c2);無效的輸入語法為類型數字:10。1。來返回零而不是,使用“try_cast”。——促進字符串最常見類型(字符串、整數——> BIGINT)設置操作的運行時檢查。>選擇typeof(c1)從(選擇5聯盟所有選擇“6”)作為T(c1);長整型數字長整型數字
>集ansi_mode=假;——沉默積分數值溢出>選擇投(12345年作為非常小的整數);57——返回NULL,而不是一個錯誤>選擇投(“一個”作為整數);零兩種模式——try_cast()是安全的>選擇try_cast(“一個”作為整數);零——允許模糊crosscasting使用雙。>選擇c1+c2從值(“5”,“7.6”)作為T(c1,c2);12。6——Crosscasts字符串為算術運算的兩倍。>選擇typeof(5- - - - - -“3”);雙——隱式地將字符串轉換為整數將10等同於10.1>選擇c1=c2從值(10,“10.1”)作為T(c1,c2);真正的——促進字符串集合操作>選擇typeof(c1)從(選擇5聯盟所有選擇“6”)作為T(c1);字符串字符串