逻辑数据类型¶
本主题介绍 Snowflake 支持的逻辑数据类型。
数据类型¶
Snowflake 支持单一逻辑数据类型 (BOOLEAN)。
BOOLEAN¶
BOOLEAN 可以有 TRUE 或 FALSE 值。BOOLEAN 也可以有 UNKNOWN 值,该值由 NULL 表示。BOOLEAN 列可用于表达式(例如,SELECT 列表)以及谓词(例如,WHERE 子句)。
BOOLEAN 数据类型支持 三元逻辑。
BOOLEAN 转换¶
Snowflake 支持转换为 BOOLEAN 和从该类型的转换。
转换为 BOOLEAN¶
非 BOOLEAN 值可以显式或隐式转换为 BOOLEAN 值。
显式转换¶
您可以使用 TO_BOOLEAN 或 CAST 函数显式地将特定 文本字符串 和 数字 值转换为 BOOLEAN 值:
- 字符串转换:
转换为 TRUE 的字符串:
'true'
、't'
、'yes'
、'y'
、'on'
、'1'
。转换为 FALSE 的字符串:
'false'
、'f'
、'no'
、'n'
、'off'
、'0'
。转换不区分大小写。
其他文本字符串无法转换为 BOOLEAN 值。
- 数字转换:
转换为 FALSE 的零 (
0
)。转换为 TRUE 的任何非零值。
隐式转换¶
Snowflake 可以隐式地将特定的文本字符串和数字值转换为 BOOLEAN 值:
- 字符串转换:
'true'
转换为 TRUE.'false'
转换为 FALSE.转换不区分大小写。
- 数字转换:
转换为 FALSE 的零 (
0
)。转换为 TRUE 的任何非零值。
从 BOOLEAN 转换¶
BOOLEAN 值可以显式或隐式地转换为非 BOOLEAN 值。
显式转换¶
您可以将 BOOLEAN 值显式地转换为文本字符串或数字值:
- 字符串转换:
TRUE 转换为
'true'
.FALSE 转换为
'false'
.
- 数字转换:
TRUE 转换为
1
.FALSE 转换为
0
.
隐式转换¶
Snowflake 可以隐式地将 BOOLEAN 值转换为文本字符串值:
- 字符串转换:
TRUE 转换为
'true'
.FALSE 转换为
'false'
.
示例¶
创建表并插入值:
CREATE OR REPLACE TABLE test_boolean(
b BOOLEAN,
n NUMBER,
s STRING);
INSERT INTO test_boolean VALUES
(true, 1, 'yes'),
(false, 0, 'no'),
(NULL, NULL, NULL);
SELECT * FROM test_boolean;
+-------+------+------+
| B | N | S |
|-------+------+------|
| True | 1 | yes |
| False | 0 | no |
| NULL | NULL | NULL |
+-------+------+------+
以下查询包括 BOOLEAN 类型的表达式:
SELECT b, n, NOT b AND (n < 1) FROM test_boolean;
+-------+------+-------------------+
| B | N | NOT B AND (N < 1) |
|-------+------+-------------------|
| True | 1 | False |
| False | 0 | True |
| NULL | NULL | NULL |
+-------+------+-------------------+
以下示例在谓词中使用 BOOLEAN 列:
SELECT * FROM test_boolean WHERE NOT b AND (n < 1);
+-------+---+----+
| B | N | S |
|-------+---+----|
| False | 0 | no |
+-------+---+----+
以下示例将文本值转换为 BOOLEAN 值。该示例使用 SYSTEM$TYPEOF 显示转换后的值的类型。
SELECT s,
TO_BOOLEAN(s),
SYSTEM$TYPEOF(TO_BOOLEAN(s))
FROM test_boolean;
+------+---------------+------------------------------+
| S | TO_BOOLEAN(S) | SYSTEM$TYPEOF(TO_BOOLEAN(S)) |
|------+---------------+------------------------------|
| yes | True | BOOLEAN[SB1] |
| no | False | BOOLEAN[SB1] |
| NULL | NULL | BOOLEAN[SB1] |
+------+---------------+------------------------------+
以下示例将数字值转换为 BOOLEAN 值:
SELECT n,
TO_BOOLEAN(n),
SYSTEM$TYPEOF(TO_BOOLEAN(n))
FROM test_boolean;
+------+---------------+------------------------------+
| N | TO_BOOLEAN(N) | SYSTEM$TYPEOF(TO_BOOLEAN(N)) |
|------+---------------+------------------------------|
| 1 | True | BOOLEAN[SB1] |
| 0 | False | BOOLEAN[SB1] |
| NULL | NULL | BOOLEAN[SB1] |
+------+---------------+------------------------------+
在这个示例中,Snowflake 隐式地将 BOOLEAN 值转换为文本值:
SELECT 'Text for ' || s || ' is ' || b AS result,
SYSTEM$TYPEOF('Text for ' || s || ' is ' || b) AS type_of_result
FROM test_boolean;
+----------------------+------------------------+
| RESULT | TYPE_OF_RESULT |
|----------------------+------------------------|
| Text for yes is true | VARCHAR(16777216)[LOB] |
| Text for no is false | VARCHAR(16777216)[LOB] |
| NULL | VARCHAR(16777216)[LOB] |
+----------------------+------------------------+