转换为 BOOLEAN
BOOLEAN 类型表示真值或非真值,只有两种可能的值:真值和非真值。
FROM String
行为变更
过去例如'1.11' 的字符串,可以被 cast 成布尔类型 'true',自 4.0 开始会转换成 null(非严格模式下) 或者报错 (严格模式下)。 过去对于'on' , 'off' ,'yes' , 'no' 等会被转换成 null,自 4.0 开始可以转换成对应的布尔值。
严格模式
BNF 定义
<boolean> ::= <whitespace>* <bool_like> <whitespace>*
<bool_like> ::= "0" | "1" | "t" | "T" | "f" | "F" | <yes> | <no> | <on> | <off> | <true> | <false>
<yes> ::= ("y" | "Y") ("e" | "E") ("s" | "S")
<no> ::= ("n" | "N") ("o" | "O")
<on> ::= ("o" | "O") ("n" | "N")
<off> ::= ("o" | "O") ("f" | "F") ("f" | "F")
<true> ::= ("t" | "T") ("r" | "R") ("u" | "U") ("e" | "E")
<false> ::= ("f" | "F") ("a" | "A") ("l" | "L") ("s" | "S") ("e" | "E")
<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
规则描述
布尔值可以是以下几种形式:0、1、yes、no、on、off、true、false,并且对大小写不敏感(忽略大小写)。此外,布尔值的前后可以包含任意数量的空白字符(包括空格、制表符、换行符等)。
对于不满足的格式,报错。
例子
字符串 | Cast as bool 结果 | Comment |
---|---|---|
"true" | 真值 | |
"false" | 非真值 | |
" \t\r\n\f\v true \t\r\n\f\v" | 真值 | 带前缀和后缀空白字符 |
"1.1" | 报错 | 非法格式 |
"YeS" | 真值 | 忽略大小写 |
'+0' | 报错 | 非法格式 |
非严格模式
BNF 定义
<boolean> ::= <whitespace>* <bool_like> <whitespace>*
<bool_like> ::= "0" | "1" | "t" | "T" | "f" | "F" | <yes> | <no> | <on> | <off> | <true> | <false>
<yes> ::= ("y" | "Y") ("e" | "E") ("s" | "S")
<no> ::= ("n" | "N") ("o" | "O")
<on> ::= ("o" | "O") ("n" | "N")
<off> ::= ("o" | "O") ("f" | "F") ("f" | "F")
<true> ::= ("t" | "T") ("r" | "R") ("u" | "U") ("e" | "E")
<false> ::= ("f" | "F") ("a" | "A") ("l" | "L") ("s" | "S") ("e" | "E")
<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
规则描述
布尔值可以是以下几种形式:0、1、yes、no、on、off、true、false,并且对大小写不敏感(忽略大小写)。此外,布尔值的前后可以包含任意数量的空白字符(包括空格、制表符、换行符等)。
对于不满足的格式,返回 null。
例子
字符串 | Cast as bool 结果 | Comment |
---|---|---|
"true" | 真值 | |
"false" | 非真值 | |
" \t\r\n\f\v true \t\r\n\f\v" | 真值 | 带前缀和后缀空白字符 |
"1.1" | null | 非法格式 |
"YeS" | 真值 | 忽略大小写 |
'+0' | null | 非法格式 |
FROM Numeric
行为变更
过去允许 date/datetime 等非数字类型转换成布尔类型,自 4.0 开始不支持。
严格模式
规则描述
对于数字类型(int/double/decimal),判断非 0 为 true。
浮点数的正负 0 会转换成 false。
例子
数字类型 | Cast as bool 结果 | Comment |
---|---|---|
121231 | 真值 | |
0 | 非真值 | |
+0.0 | 非真值 | 浮点数正 0 |
-0.0 | 非真值 | 浮点数负 0 |
-1 | 真值 | |
1 | 真值 |
非严格模式
规则描述
对于数字类型(int/double/decimal),判断非 0 为 true。
浮点数的正负 0 会转换成 false。
例子
数字类型 | Cast as bool 结果 | Comment |
---|---|---|
121231 | 真值 | |
0 | 非真值 | |
+0.0 | 非真值 | 浮点数正 0 |
-0.0 | 非真值 | 浮点数负 0 |
-1 | 真值 | |
1 | 真值 |