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;