PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come posso eseguire il cast di una stringa su intero e avere 0 in caso di errore nel cast con PostgreSQL?

Stavo solo lottando con un problema simile, ma non volevo il sovraccarico di una funzione. Mi è venuta la seguente domanda:

SELECT myfield::integer FROM mytable WHERE myfield ~ E'^\\d+$';

Postgres abbrevia i suoi condizionali, quindi non dovresti ottenere alcun numero non intero che colpisce il tuo cast ::integer. Gestisce anche i valori NULL (non corrisponderanno all'espressione regolare).

Se vuoi zeri invece di non selezionare, allora un'istruzione CASE dovrebbe funzionare:

SELECT CASE WHEN myfield~E'^\\d+$' THEN myfield::integer ELSE 0 END FROM mytable;