Wie konvertieren von PostgreSQL 9.4 s jsonb Typ float
Ich versuche folgende Abfrage:
SELECT (json_data->'position'->'lat') + 1.0 AS lat FROM updates LIMIT 5;
(+1.0 ist nur da, um Kraft Konvertierung zu float. Meine eigentlichen Abfragen sind wesentlich komplexer, diese Abfrage ist nur ein Testfall für das problem.)
Bekomme ich die Fehlermeldung:
ERROR: operator does not exist: jsonb + numeric
Wenn ich in explizites casting:
SELECT (json_data->'position'->'lat')::float + 1.0 AS lat FROM updates LIMIT 5;
dem Fehler wird:
ERROR: operator does not exist: jsonb + double precesion
Ich verstehe, dass die meisten jsonb-Werte können nicht gewirkt werden, in schwebt, aber in diesem Fall weiß ich, dass die lats sind alle JSON-zahlen.
Gibt es eine Funktion die wirft jsonb Werte für floats (oder die return-Null-Werte für die uncastable)?
InformationsquelleAutor der Frage fadedbee | 2014-07-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Operationen, um nutzen aus
JSON
. Der erste->
zurückJSON
. Die zweite->>
wird den text wieder.Details: JSON-Funktionen und-Operatoren
Versuchen
InformationsquelleAutor der Antwort Igor Romanchenko
Pro Dokumentationes gibt auch die Funktionen
Analog zu Ihrer json-Zwillinge (seit pg 9.3)
Müssen Sie eine vordefinierte Reihe geben. Entweder verwenden Sie die Zeile-geben Sie einer vorhandenen Tabelle oder definieren mit
CREATE TYPE
. Oder ersetzen Sie es mit einer temporären Tabelle ad hoc:Kann eine einzelne Spalte oder eine lange Liste von Spalten.
Nur die Spalten gefüllt werden, wo die Namen entspricht einem Schlüssel in der
json
Objekt. Die Wert dazu gezwungen wird, um die Spalte Typ und kompatibel sein muss oder eine Ausnahme ausgelöst wird. Andere Tasten werden ignoriert.Mit einem implizit
SEITLICHE JOIN
hier.Ähnlich, verwenden
jsonb_populate_recordset()
zu zerlegen-arrays in mehrere Zeilen pro Eintrag.Dies funktioniert auf die gleiche Weise in Postgres 9.3 mit
json
. Es gibt den zusätzlichen Vorteil, dass durch die Umwandlung zu /austext
intern ist nicht notwendig für numerische Daten injsonb
.InformationsquelleAutor der Antwort Erwin Brandstetter
AFAIK gibt es keine json->float casting in Postgres, so könnten Sie versuchen, eine explizite
(json_data->'position'->'lat')::text::float
castInformationsquelleAutor der Antwort knitti
Müssen Sie zum cast der json-Wert in text um und dann zu schweben.
Versuchen Sie dies:
InformationsquelleAutor der Antwort Luis Castillo