■ はじめに
小ネタ。 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