Ho una tabella Postgres con una colonna di stringa che trasporta valori numerici. Ho bisogno di convertire queste stringhe in numeri per la matematica, ma ho bisogno sia dei valori NULL
sia delle stringhe vuote da interpretare come 0
.Cast stringa su numero, interpretazione stringa vuota o vuota come 0
posso convert empty strings into null values:
# select nullif('','');
nullif
--------
(1 row)
e posso convert null values into a 0
:
# select coalesce(NULL,0);
coalesce
----------
0
(1 row)
e posso convert strings into numbers:
# select cast('3' as float);
float8
--------
3
(1 row)
Ma quando cerco di combinare queste tecniche, ottengo errori:
# select cast(nullif(coalesce('',0), '') as float);
ERROR: invalid input syntax for integer: ""
LINE 1: select cast(nullif(coalesce('',0), '') as float);
# select coalesce(nullif('3',''),4) as hi;
ERROR: COALESCE types text and integer cannot be matched
LINE 1: select coalesce(nullif('3',''),4) as hi;
Cosa sto sbagliando?
Nota a margine - è meglio usa 'numeric' invece di' float' nella maggior parte dei casi. Usa 'float' solo quando sai che hai davvero bisogno di' float'. –