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);字符串字符串