SnowConvert AI - PostgreSQL - 文字列比較¶
PostgreSQLおよびPostgreSQLベースの言語(Greenplum、RedShift、Netezza)では、固定長データ型(CHAR、CHARACTERなど)を比較するとき、または固定長データ型とvarcharデータ型を比較するとき、末尾の空白は無視されます。つまり、 'water ' (末尾にスペースを含む値)のような文字列は、 'water' (末尾にスペースを含まない値)と等しいとみなされます。
もし以下を
CHAR(6) 'hello', which is stored as 'hello ', with one padded character
比較するなら
CHAR(6) 'hello ', with no need to add any padding character
末尾の空白の後は実質的に同じです。
一方、Snowflakeは固定長の文字型を持たず、 VARCHAR データ型に対してよりリテラルなアプローチをとっています。文字列は、末尾の空白を含めて、保存されているとおりに扱われます。したがって、Snowflakeでは、 'water ' は 'water' と等しいとはみなされません。
PostgreSQLからSnowflakeへの変換において、末尾のスペースが文字列の比較結果に影響を与えないように、SnowConvert AIは、チームが確認した関連する比較に自動的に BTRIM を追加します。これにより、一貫した動作が保証されます。
サンプルソースパターン¶
次のスクリプトデータを使って文字列比較を説明しよう。
create table table1(c1 char(2), c2 char(2), c3 VARCHAR(2), c4 VARCHAR(2));
insert into table1 values ('a','a ','a','a ');
insert into table1 values ('b','b','b','b');
NULLIF¶
Varcharデータ型¶
入力コード:
PostgreSQL¶
SELECT NULLIF(c3,c4) FROM table1;
出力コード:
Snowflake¶
SELECT
NULLIF(c3,c4) FROM
table1;
Charデータ型¶
入力コード:
PostgreSQL¶
select nullif(c1,c2) AS case2 from table1;
出力コード:
Snowflake¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "table1" **
select
nullif(c1,c2) AS case2 from
table1;
GREATEST または LEAST¶
入力コード:
PostgreSQL¶
select '"' || greatest(c1, c2) || '"' AS greatest, '"' || least(c1, c2) || '"' AS least from table1;
出力コード:
Snowflake¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "table1" **
select '"' || GREATEST_IGNORE_NULLS(c1, c2) || '"' AS greatest, '"' || LEAST_IGNORE_NULLS(c1, c2) || '"' AS least from
table1;