逻辑数据类型

本主题介绍 Snowflake 支持的逻辑数据类型。

数据类型

Snowflake 支持单一逻辑数据类型 (BOOLEAN)。

BOOLEAN

BOOLEAN 可以有 TRUE 或 FALSE 值。BOOLEAN 也可以有 UNKNOWN 值,该值由 NULL 表示。BOOLEAN 列可用于表达式(例如,SELECT 列表)以及谓词(例如,WHERE 子句)。

BOOLEAN 数据类型支持 三元逻辑

BOOLEAN 转换

Snowflake 支持转换为 BOOLEAN 和从该类型的转换。

转换为 BOOLEAN

非 BOOLEAN 值可以显式或隐式转换为 BOOLEAN 值。

显式转换

您可以使用 TO_BOOLEANCAST 函数显式地将特定 文本字符串数字 值转换为 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;
Copy
+-------+------+------+
| B     |    N | S    |
|-------+------+------|
| True  |    1 | yes  |
| False |    0 | no   |
| NULL  | NULL | NULL |
+-------+------+------+

以下查询包括 BOOLEAN 类型的表达式:

SELECT b, n, NOT b AND (n < 1) FROM test_boolean;
Copy
+-------+------+-------------------+
| 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);
Copy
+-------+---+----+
| B     | N | S  |
|-------+---+----|
| False | 0 | no |
+-------+---+----+

以下示例将文本值转换为 BOOLEAN 值。该示例使用 SYSTEM$TYPEOF 显示转换后的值的类型。

SELECT s,
       TO_BOOLEAN(s),
       SYSTEM$TYPEOF(TO_BOOLEAN(s))
  FROM test_boolean;
Copy
+------+---------------+------------------------------+
| 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;
Copy
+------+---------------+------------------------------+
| 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;
Copy
+----------------------+------------------------+
| RESULT               | TYPE_OF_RESULT         |
|----------------------+------------------------|
| Text for yes is true | VARCHAR(16777216)[LOB] |
| Text for no is false | VARCHAR(16777216)[LOB] |
| NULL                 | VARCHAR(16777216)[LOB] |
+----------------------+------------------------+
语言: 中文