■ はじめに
https://dk521123.hatenablog.com/entry/2021/09/08/202004
の続き。 Redshiftは、PostgreSQL互換と言われているが ちょこちょこ異なっていること見つかる今日この頃。 今回は、文字列結合について扱い、 PostgreSQLとの差異についても扱う。
目次
【1】Amazon Redshift での文字列結合 1)CONCAT関数 2)連結演算子 - 「||」による結合 【2】PostgreSQLとの差異 1)CONCAT関数単体では、3つ以上の連結はできない 2)文字列がNULLの場合、結果もNULLになる 【3】サンプル
【1】Amazon Redshift での文字列結合
* 以下の2通り。 * 個人的には、Amazon Redshiftでの文字列結合は、 「2)連結演算子 - 「||」による結合」にした方がいいと思う => 理由は、「【3】PostgreSQLとの差異」を参照
1)CONCAT関数
* 2つの文字列を連結
https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_CONCAT.html
構文
CONCAT ( <string1>, <string2> )
サンプル
SELECT CONCAT('Hello', ' World')
2)連結演算子 - 「||」による結合
* 2つ以上の文字列を連結
https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_concat_op.html
構文
<string1> || <string2> || ...
サンプル
SELECT 'Hello' || ' ' || 'World')
【3】PostgreSQLとの差異
* 細かいけど、差異があって、勉強になった、、、
1)CONCAT関数単体では、3つ以上の連結はできない
PostgreSQLとは異なり、 Amazon Redshift において、CONCAT関数単体では、 3つ以上の連結はできない
エラーになるSQL例
SELECT CONCAT('Hello', ' ', ' World')
エラー内容
ERROR: function concat("unknown", "unknown", "unknown") does not exist
3つ以上連結したい場合
SELECT -- [1] 連結演算子「||」を使う(個人的には、こっちでいいのではっと思う) 'Hello' || ' ' || 'World' AS val1, -- [2] ネストして使う CONCAT('Hello', CONCAT(' ', ' World')) AS val2
2)文字列がNULLの場合、結果もNULLになる
https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_concat_op.html
より抜粋 ~~~~~~~~~ CONCAT 関数と連結演算子のどちらにおいても、 一方または両方の文字列が null である場合は、 連結の結果が null になります。 ~~~~~~~~~
補足:PostgreSQL : CONCAT関数
https://www.postgresql.jp/document/9.3/html/functions-string.html
concat(str "any" [, str "any" [, ...] ]) すべての引数の結合。ただしNULLは無視される concat('abcde', 2, NULL, 22) => abcde222
PostgreSQLのCONCAT関数の場合
* 3つ以上の文字列結合可能(可変引数) * NULLは無視される => 将来的に、Redshiftもこうなるのかな、、、
参考文献
https://www.fixes.pub/program/366854.html
関連記事
Amazon Redshift ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/22/002139
Amazon Redshift ~ キャスト ~
https://dk521123.hatenablog.com/entry/2021/09/08/202004