Menukar Jenis jsonb PostgreSQL kepada Terapung
Artikel ini menangani cabaran menukar jenis jsonb PostgreSQL kepada terapung. Kesukaran timbul apabila cuba melakukan operasi aritmetik pada data jsonb, yang secara lalai mengembalikan ralat.
Pertanyaan dan Ralat Awal
Pertanyaan awal dibentangkan:
SELECT (json_data->'position'->'lat') + 1.0 AS lat FROM updates LIMIT 5;
Pertanyaan ini mencetuskan ralat kerana pengendali tidak boleh digunakan pada jenis jsonb dan angka. Menambah penghantaran eksplisit, seperti yang ditunjukkan di bawah, menghasilkan satu lagi ralat:
SELECT (json_data->'position'->'lat')::float + 1.0 AS lat FROM updates LIMIT 5;
Mesej ralat kini menunjukkan bahawa pengendali tidak boleh digunakan antara jsonb dan ketepatan berganda.
Operator JSON
Isu ini berpunca daripada fakta bahawa -> operator mengembalikan objek JSON, manakala ->-> teks output. Untuk menghantar nilai jsonb terapung dengan betul, ->-> operator harus digunakan.
Penyelesaian
Penyelesaian kepada masalah ini ialah menggantikan -> operator dengan ->->:
SELECT (json_data->'position'->>'lat')::float + 1.0 AS lat FROM updates LIMIT 5
Pertanyaan yang diubah suai ini kini menghantar nilai jsonb dengan betul untuk terapung dan melaksanakan operasi penambahan tanpa ralat.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menukar jsonb PostgreSQL kepada Terapung untuk Operasi Aritmetik dengan betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!