SnowConvert AI - PostgreSQL - Comparação de cadeias de caracteres

Nas linguagens baseadas em PostgreSQL e PostgreSQL (Greenplum, RedShift, Netezza), ao comparar tipos de dados de comprimento fixo (CHAR, CHARACTER, etc) ou ao comparar tipos de dados de comprimento fixo com tipos de dados varchar, os espaços à direita são ignorados. Isso significa que uma cadeia de caracteres como ‘water (valor com um espaço final) seria considerado igual a 'water' (valor sem um espaço final).

Se você comparar

CHAR(6) 'hello', which is stored as 'hello ', with one padded character
Copy

com

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

eles são efetivamente os mesmos após os espaços finais.

Enquanto isso, o Snowflake não tem tipos de caracteres de comprimento fixo e adota uma abordagem mais literal para seus tipo de dados VARCHAR, tratando as cadeias de caracteres exatamente como são armazenadas, incluindo quaisquer espaços em branco no final. Portanto, no Snowflake, ‘water não é considerado igual a 'water'.

Para impedir que os espaços finais afetem os resultados da comparação de cadeias de caracteres nas conversões de PostgreSQL para Snowflake, o SnowConvert AI adiciona automaticamente BTRIM a comparações relevantes, conforme identificado por nossa equipe. Isso garante um comportamento consistente.

Amostra de padrões da origem

Vamos usar os seguintes dados de script para explicar a comparação de cadeias de caracteres.

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

Tipo de dados varchar

Código de entrada:

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

Código de saída:

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

Tipos de dados char

Código de entrada:

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

Código de saída:

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

GREATEST ou LEAST

Código de entrada:

PostgreSQL

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

Código de saída:

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