Ich habe eine Postgres-Tabelle mit einer Zeichenfolge Spalte mit numerischen Werten. Ich muss diese Zeichenfolgen in Zahlen für Mathematik konvertieren, aber ich brauche sowohl NULL
Werte als auch leere Zeichenfolgen als 0
interpretiert werden.Cast-String zu Nummer, Null oder leere Zeichenfolge als 0 interpretiert
Ich kann convert empty strings into null values:
# select nullif('','');
nullif
--------
(1 row)
Und ich kann convert null values into a 0
:
# select coalesce(NULL,0);
coalesce
----------
0
(1 row)
Und ich kann convert strings into numbers:
# select cast('3' as float);
float8
--------
3
(1 row)
Aber wenn ich versuche, diese Techniken zu kombinieren, ich Fehler:
# 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;
Was mache ich falsch?
Randnotiz - es ist besser, Verwenden Sie in den meisten Fällen 'numerisch' anstelle von' float'. Verwenden Sie 'float' nur, wenn Sie wissen, dass Sie' float' wirklich brauchen. –