【AWS】Amazon Redshift ~ キャスト ~

■ はじめに

小ネタ。
Amazon Redshiftを使っていて、
キャストの仕方が色々あるようなので、纏めてみた。

特に、「2)「::」 を使用したキャスト」が知らなかったので、
自戒の意味を込めて、記しておく。

目次

【0】公式サイト
【1】Amazon Redshiftでのキャスト方法
 1)CAST 関数
 2)「::」 を使用したキャスト
 3)CONVERT 関数 
【2】PostgreSQLとの差異
【3】サンプル
 補足:TO_CHARについて

【0】公式サイト

https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_CAST_function.html

【1】Amazon Redshiftでのキャスト方法

* 以下の3通り。

1)CAST 関数

CAST ( <expression> AS <type> )

2)「::」 を使用したキャスト

<expression>::<type>

3)CONVERT 関数

CONVERT ( <type>, <expression> )

【2】PostgreSQLとの差異

PostgreSQLで、使える方法と使えない方法は、以下の通り。

使用可能な方法

1)CAST 関数
2)「::」 を使用したキャスト

使用不可な方法

3)CONVERT 関数
 => PostgreSQL の場合、CONVERT 関数はキャストではない
 => 試して、エラーが出て、分かった。

PostgreSQL : CONVERT 関数
https://www.postgresql.jp/document/7.4/html/functions-string.html

より抜粋
~~~~~~~~~~~~
convert(string using conversion_name)

戻り値:text

指定した変換名でコード変換します。
変換は、CREATE CONVERSIONを使用して定義できます。
また、事前に定義されている変換名もいくつかあります

convert('PostgreSQL' using iso_8859_1_to_utf_8)
~~~~~~~~~~~~

【3】サンプル

SELECT
 '111111' AS val1
 , '111111'::BIGINT AS val2
 -- 数値のカンマ区切り
 , TO_CHAR('111111'::NUMERIC, 'FM999G999G999G990D') AS val3
 , TO_CHAR(CAST('111111' AS NUMERIC), 'FM999G999G999G990D') AS val4

出力結果

"val1","val2","val3","val4"
"111111","111111","111,111","111,111"

補足:TO_CHARについて

https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_TO_CHAR.html

TO_CHAR (timestamp_expression | numeric_expression , 'format')

形式「format」について
https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Numeric_formating.html

'FM999G999G999G990D'

 => FM : フルモード。パディングとして使用されている空白とゼロを非表示
 => 9 : 指定された桁数の数値
 => G : グループ区切り文字
 => 0 : 先頭に 0 が付いた数値
 => D : 小数点

関連記事

Amazon Redshift ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/22/002139
Amazon Redshift ~ 文字列結合 ~
https://dk521123.hatenablog.com/entry/2021/09/09/093855