Saltar al contenido

Cómo convertir el tipo jsonb de PostgreSQL 9.4 para flotar

Posterior a indagar en diversos repositorios y páginas webs finalmente hemos dado con la solución que te mostramos ahora.

Solución:

Hay dos operaciones para obtener valor de JSON. El primero -> regresará JSON. El segundo ->> devolverá el texto.

Detalles: funciones y operadores JSON

Probar

SELECT (json_data->'position'->>'lat')::float + 1.0 AS lat
FROM updates
LIMIT 5

AFAIK no hay json->float casting en Postgres, por lo que podría probar un explícito (json_data->'position'->'lat')::text::float emitir

Por documentación, también están las funciones.

jsonb_populate_record()
jsonb_populate_recordset()

Análogo a sus gemelos json (presentes desde la página 9.3)

json_populate_record()
json_populate_recordset()

Necesita un tipo de fila predefinido. Utilice el tipo de fila de una tabla existente o defina uno con CREATE TYPE. O sustituir con una tabla temporal ad hoc:

CREATE TEMP TABLE x(lat float);

Puede ser una sola columna o una larga lista de columnas.

Sólo se rellenan aquellas columnas en las que el nombre coincide con un key en el json objeto. los valor es coaccionado a la columna escribe y tiene que ser compatible o se genera una excepción. Otro keys son ignorados.

SELECT lat + 1  -- no need for 1.0, this is float already
FROM   updates u
     , jsonb_populate_record(NULL::x, u.json_data->'position')
LIMIT  5;

Usando un implícito LATERAL JOIN aquí.

Del mismo modo, utilice jsonb_populate_recordset() para descomponer matrices en varias filas por entrada.

Esto funciona de la misma manera en Postgres 9.3 con json. Existe la ventaja añadida de que transmitir a/desde text internamente no es necesario para datos numéricos en jsonb.

No se te olvide recomendar esta crónica si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *