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
Copy

比較するなら

CHAR(6) 'hello ', with no need to add any padding character
Copy

末尾の空白の後は実質的に同じです。

一方、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');
Copy

NULLIF

Varcharデータ型

入力コード:

PostgreSQL
SELECT NULLIF(c3,c4) FROM table1;
Copy

出力コード:

Snowflake
SELECT
NULLIF(c3,c4) FROM
table1;
Copy

Charデータ型

入力コード:

PostgreSQL
select nullif(c1,c2) AS case2 from table1;
Copy

出力コード:

Snowflake
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "table1" **
select
nullif(c1,c2) AS case2 from
table1;
Copy

GREATEST または LEAST

入力コード:

PostgreSQL

select '"' || greatest(c1, c2) || '"' AS greatest, '"' || least(c1, c2) || '"' AS least from table1;
Copy

出力コード:

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;
Copy