SnowConvert AI - PostgreSQL - Comparaison des chaînes¶
Dans les langages basés sur PostgreSQL et PostgreSQL (Greenplum, RedShift, Netezza), lors de la comparaison de types de données de longueur fixe (CHAR, CHARACTER, etc.) ou en comparant des types de données de longueur fixe à des types de données varchar, les espaces de fin sont ignorés. Cela signifie qu’une chaîne comme 'eau ' (valeur avec un espace de fin) serait considérée comme égale à 'eau' (valeur sans espace de fin).
Si vous comparez�
CHAR(6) 'hello', which is stored as 'hello ', with one padded character
à�
CHAR(6) 'hello ', with no need to add any padding character
Ils sont effectivement les mêmes après les espaces de fin.
En attendant, Snowflake n’a pas de types de caractères de longueur fixe et adopte une approche plus littérale pour son type de données VARCHAR, en traitant les chaînes exactement telles qu’elles sont stockées, y compris les espaces de fin. Par conséquent, dans Snowflake, 'eau ' n’est pas considéré comme égal à 'eau'.
Pour éviter que les espaces de fin n’affectent les résultats de la comparaison de chaînes dans les conversions de PostgreSQL vers Snowflake, SnowConvert AI ajoute automatiquement BTRIM aux comparaisons pertinentes comme notre équipe l’a identifié. Cela garantit un comportement cohérent.
Modèles d’échantillons de sources¶
Utilisons les données du script suivant pour expliquer la comparaison des chaînes.
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¶
Type de données Varchar¶
Code d’entrée :
PostgreSQL¶
SELECT NULLIF(c3,c4) FROM table1;
Code de sortie :
Snowflake¶
SELECT
NULLIF(c3,c4) FROM
table1;
Types de données Char¶
Code d’entrée :
PostgreSQL¶
select nullif(c1,c2) AS case2 from table1;
Code de sortie :
Snowflake¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "table1" **
select
nullif(c1,c2) AS case2 from
table1;
GREATEST ou LEAST¶
Code d’entrée :
PostgreSQL¶
select '"' || greatest(c1, c2) || '"' AS greatest, '"' || least(c1, c2) || '"' AS least from table1;
Code de sortie :
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;