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