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
com
CHAR(6) 'hello ', with no need to add any padding character
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');
NULLIF¶
Tipo de dados varchar¶
Código de entrada:
PostgreSQL¶
SELECT NULLIF(c3,c4) FROM table1;
Código de saída:
Snowflake¶
SELECT
NULLIF(c3,c4) FROM
table1;
Tipos de dados char¶
Código de entrada:
PostgreSQL¶
select nullif(c1,c2) AS case2 from table1;
Código de saída:
Snowflake¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "table1" **
select
nullif(c1,c2) AS case2 from
table1;
GREATEST ou LEAST¶
Código de entrada:
PostgreSQL¶
select '"' || greatest(c1, c2) || '"' AS greatest, '"' || least(c1, c2) || '"' AS least from table1;
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;