179 votes

Chaîne Typecast vers entier

J'importe des données d'une table qui a des flux RAW dans Varchar, je dois importer une colonne dans varchar dans une colonne de chaîne. J'ai essayé d'utiliser les champs <column_name>::integer to_number(<column_name>,'9999999') mais je reçois des erreurs, car il y a quelques champs vides, je dois les récupérer comme vides ou nuls dans la nouvelle table.

185voto

Frank Heikens Points 29270

Wild GUESS : Si votre valeur est une chaîne vide, vous pouvez utiliser NULLIF pour la remplacer par NULLIF :

SELECT
    NULLIF(your_value, '')::int

71voto

tatty Points 176

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

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

35voto

vyegorov Points 6487

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

SELECT CAST(nullif(<column>, '') AS integer);

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

SELECT CAST(coalesce(<column>, '0') AS integer);

Je suis d'accord, un message d'erreur aiderait beaucoup.

30voto

Jade Hamel Points 1149

La seule façon pour moi de ne pas avoir d'erreur à cause de NULL, de caractères spéciaux ou de chaîne vide est de faire ceci :

SELECT REGEXP_REPLACE(COALESCE(<column>::character varying, '0'), '[^0-9]*' ,'0')::integer FROM table

16voto

niko Points 683

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

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X