2012-05-09 16 views
68

Sto importando i dati da una tabella con feed raw in Varchar, ho bisogno di importare una colonna in varchar in una colonna di stringhe. Ho provato a utilizzare <column_name>::integer e to_number(<column_name>,'9999999') ma sto ricevendo errori, poiché ci sono alcuni campi vuoti, ho bisogno di recuperarli come vuoti o nulli nella nuova tabella.typecast stringa a numero intero - Postgres

Gentilmente fammi sapere se esiste una funzione per lo stesso.

+3

Puoi mostrarci il messaggio di errore? Ciò aiuterebbe –

risposta

72

selvaggio indovinare: se il valore è una stringa vuota, è possibile utilizzare NULLIF di sostituirlo per un NULL:

SELECT 
    NULLIF(your_value, '')::int 
18

Se è necessario trattare le colonne vuote come NULL s, provate questo:

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

D'altra parte, se si dispone di NULL valori che è necessario evitare, provare:

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

Sono d'accordo, il messaggio di errore sarebbe di grande aiuto.

8

Non riesco a commentare (troppo poca reputazione? Sono piuttosto nuovo) sul post di Lukas.

Il mio setup PG to_number(NULL) non funziona, quindi la mia soluzione sarebbe:

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

Questo dovrebbe funzionare, ma dovrebbe essere un equivalente esatto dell'approccio 'NULLIF()' meno dettagliato. Lo standard definisce in realtà NULLIF come una forma del predicato CASE. – kgrittn

41

Si può anche andare un ulteriore e limitare in questo campo coalescenza, come, ad esempio: -

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

L'unico modo che riesco a non avere un errore a causa di NULL, o caracteres speciali o stringa vuota è in questo modo:

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

Per me (9.6.2) questa era l'unica cosa che funzionava, tutte le altre risposte fallivano. –