chaîne de transtypage en entier – Postgres

Je importe des données à partir d’une table qui contient des stream bruts dans Varchar, je dois importer une colonne dans varchar dans une colonne de chaîne. J’ai essayé d’utiliser ::integer ainsi que to_number(,'9999999') mais je reçois des erreurs, car il y a quelques champs vides, je dois les récupérer comme vides ou null dans la nouvelle table .

Veuillez me faire savoir s’il existe une fonction pour la même chose.

Devine sauvage: Si votre valeur est une chaîne vide, vous pouvez utiliser NULLIF pour la remplacer par une valeur NULL:

 SELECT NULLIF(your_value, '')::int 

Vous pouvez même aller plus loin et restreindre ce champ fusionné, comme par exemple: –

 SELECT CAST(coalesce(, '0') AS integer) as new_field from  where CAST(coalesce(, '0') AS integer) >= 10;

Si vous devez traiter les colonnes vides comme NULL , essayez ceci:

 SELECT CAST(nullif(, '') AS integer); 

Par contre, si vous avez des valeurs NULL à éviter, essayez:

 SELECT CAST(coalesce(, '0') AS integer); 

Je suis d’accord, le message d’erreur aiderait beaucoup.

La seule façon dont je réussis à ne pas avoir d’erreur à cause de NULL, de caractères spéciaux ou d’une chaîne vide est de faire ceci:

 SELECT REGEXP_REPLACE(COALESCE(, '0'), '[^0-9]*' ,'0')::integer FROM table 

Je ne suis pas capable de commenter (trop peu de réputation? Je suis assez nouveau) sur le post de Lukas.

Sur ma configuration PG to_number(NULL) ne fonctionne pas, ma solution serait donc:

 SELECT CASE WHEN column = NULL THEN NULL ELSE column :: Integer END FROM table 

Si la valeur contient des caractères non numériques, vous pouvez convertir la valeur en entier comme suit:

 SELECT CASE WHEN ~E'^\\d+$' THEN CAST ( AS INTEGER) ELSE 0 END FROM table; 

L’opérateur CASE vérifie la , s’il correspond au modèle entier, il convertit le taux en entier, sinon il renvoie 0