【Snowflake】Snowflake ~ 基本編 / キャスト ~

■ はじめに

Snowflake における データ型 の キャスト(Cast)について扱う

目次

【0】Snowflakeのキャストの仕方
【1】CAST
【2】:: 演算子
【3】TO_ データ型
【4】TRY_CAST
【5】TRY_TO_ データ型

【0】Snowflakeのキャストの仕方

snowflake でのキャストの仕方は、以下の通り。

【1】CAST
【2】:: 演算子
【3】TO_ データ型
【4】TRY_CAST
【5】TRY_TO_ データ型

※ 日時関連のキャストの詳細は、以下の関連記事を参照のこと。

Snowflake ~ 日時関連 ~
https://dk521123.hatenablog.com/entry/2022/06/17/113003

【1】CAST

構文

CAST( <source_expr> AS <target_data_type> )

公式ドキュメント

https://docs.snowflake.com/ja/sql-reference/functions/cast.html

【2】:: 演算子

* 「【1】CAST」の代替構文

構文

<source_expr> :: <target_data_type>

公式ドキュメント

https://docs.snowflake.com/ja/sql-reference/functions/cast.html

【3】TO_ データ型

構文

https://docs.snowflake.com/ja/sql-reference/functions/to_char.html

-- TO_VARCHAR の場合
TO_VARCHAR( <expr> )
TO_VARCHAR( <numeric_expr> [, '<format>' ] )
TO_VARCHAR( <date_or_time_expr> [, '<format>' ] )
TO_VARCHAR( <binary_expr> [, '<format>' ] )

補足:TO_BOOLEAN

https://docs.snowflake.com/ja/sql-reference/functions/to_boolean.html

より抜粋
~~~~~~~
使用上の注意

テキスト式の場合、文字列は次のようになります。
 'true'、 't'、 'yes'、 'y'、 'on'、 '1' は TRUEを返します。
 'false'、 'f'、 'no'、 'n'、 'off'、 '0' は FALSEを返します。

 他のすべての文字列はエラーを返します。
 文字列は大文字と小文字を区別しません。

数値式の場合:
 0 は FALSEを返します。
 ゼロ以外の値はすべて TRUEを返します。
~~~~~~~

【4】TRY_CAST

* 変換できた場合は、そのままキャストし、
 変換できなかった場合は、null を返却
* エラー「Failed to cast variant value "" to TIMESTAMP_NTZ」
 の調査中に、以下のサイトがヒットしたことにより、存在を確認
 => ただし、TRY_CASTのみでは解決できず
 (詳細は、後述「使用上の注意」を参照)

https://stackoverflow.com/questions/64048845/snowflake-failed-to-cast-variant-value-timestamp-value-to-timestamp-ntz

* 対応案については、以下の関連記事を参照のこと。

エラー「Failed to cast variant value "" to XXX」時の対応
https://dk521123.hatenablog.com/entry/2021/12/17/102659

構文

TRY_CAST( <source_string_expr> AS <target_data_type> )

使用上の注意

* 引数 <source_string_expr> は、あくまで「文字列」
 => なので、「variant value」等だと例外が発生する

公式ドキュメント

https://docs.snowflake.com/ja/sql-reference/functions/try_cast.html

【5】TRY_TO_ データ型

* 「【3】TO_ データ型」の TRY_CAST版

構文

-- TRY_TO_TIMESTAMP の場合
TRY_TO_TIMESTAMP( <string_expr> [, <format> ] )
TRY_TO_TIMESTAMP( '<integer>' )

公式ドキュメント

TRY_TO_TIMESTAMP / TRY_TO_TIMESTAMP_*
https://docs.snowflake.com/ja/sql-reference/functions/try_to_timestamp.html

関連記事

Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 入門編 / Hello world
https://dk521123.hatenablog.com/entry/2021/11/22/212520
Snowflake ~ 基本編 / データ型 ~
https://dk521123.hatenablog.com/entry/2021/12/16/095524
Snowflake ~ 基本編 / データロード ~
https://dk521123.hatenablog.com/entry/2021/11/15/221245
Snowflake ~ 基本編 / アクセス制御 ~
https://dk521123.hatenablog.com/entry/2021/11/16/231010
Snowflake ~ 基本編 / ゼロコピークローン ~
https://dk521123.hatenablog.com/entry/2021/11/27/134934
Snowflake ~ 日時関連 ~
https://dk521123.hatenablog.com/entry/2022/06/17/113003
エラー「Failed to cast variant value "" to XXX」時の対応
https://dk521123.hatenablog.com/entry/2021/12/17/102659