論理データ型

このトピックでは、Snowflakeでサポートされている論理データ型について説明します。

データ型

Snowflakeは、単一の論理データ型の BOOLEAN をサポートしています。

BOOLEAN

BOOLEAN は、 TRUE または FALSE の値を持つことができます。BOOLEAN は、 NULL で表される UNKNOWN 値を持つこともできます。BOOLEAN 列は、述語(例: WHERE 句)と同様に式(例: SELECT リスト)で使用することができます。

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 値に変換できません。

数字変換:
  • ゼロ(0)は FALSEに変換されます。

  • ゼロ以外の値は TRUE に変換されます。

暗黙的な変換

Snowflakeは、特定の文字列や数字の値を暗黙的に BOOLEAN 値に変換します。

文字列変換:
  • 'true' は TRUE に変換されます。

  • 'false' は FALSE に変換されます。

  • 変換では大文字と小文字は区別されません。

数字変換:
  • ゼロ(0)は FALSEに変換されます。

  • ゼロ以外の値は 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] |
+----------------------+------------------------+