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
Copy

à�

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

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');
Copy

NULLIF

Type de données Varchar

Code d’entrée :

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

Code de sortie :

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

Types de données Char

Code d’entrée :

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

Code de sortie :

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

GREATEST ou LEAST

Code d’entrée :

PostgreSQL

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

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;
Copy