Pregunta Cadena de transmisión a entero - Postgres


Estoy importando datos de una tabla que tiene feeds crudos en Varchar, necesito importar una columna en varchar en una columna de cadena. Intenté usar el <column_name>::integer tanto como to_number(<column_name>,'9999999') pero recibo errores, ya que hay algunos campos vacíos, necesito recuperarlos como vacíos o nulos en la nueva tabla.

Por favor, hágamelo saber si hay una función para el mismo.


74
2018-05-09 14:34


origen


Respuestas:


Conjetura salvaje: si su valor es una cadena vacía, puede usar NULLIF para reemplazarla por NULL:

SELECT
    NULLIF(your_value, '')::int

82
2018-05-09 14:43



Incluso puede ir más allá y restringir en este campo combinado como, por ejemplo:

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

45
2017-12-01 13:38



Si necesita tratar columnas vacías como NULLs, prueba esto:

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

Por otro lado, si tienes NULL valores que debe evitar, intente:

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

Estoy de acuerdo, el mensaje de error ayudaría mucho.


20
2018-05-09 14:44



La única forma en que puedo tener éxito al no tener un error debido a NULL, o caracteres especiales o cadenas vacías es haciendo esto:

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

17
2018-06-01 20:22



No puedo hacer ningún comentario (¿muy poca reputación? Soy bastante nuevo) en la publicación de Lukas.

En mi configuración PG to_number(NULL) no funciona, entonces mi solución sería:

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

10
2018-05-09 14:46



Si el valor contiene caracteres no numéricos, puede convertir el valor en un entero de la siguiente manera:

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

El operador CASE comprueba la <columna>, si coincide con el patrón entero, convierte la velocidad en un entero; de lo contrario, devuelve 0


0
2018-06-22 08:59