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