Saya memiliki kumpulan data yang berisi kolom di json dengan atribut yang memberi saya daftar, dan saya ingin menghapus sarangnya untuk bergabung dengan beberapa data yang berbeda.

Saya memikirkan json_extract_scalar json_data, lalu saya bisa split dan akhirnya unnest dengan operasi lain, namun saya mendapat masalah.

Dalam kasus saya, ketika saya menjalankan json_extract itu berfungsi dengan baik tetapi saya tidak dapat mengonversi ke varchar. Di sisi lain, jika saya menggunakan json_extract_scalar itu mengembalikan nilai nol.

Saya pikir masalahnya seharusnya adalah tanda kutip, tetapi saya tidak yakin bagaimana menghadapinya - dan bahkan jika ini adalah masalah yang benar.

Izinkan saya memberi Anda contoh datanya:

{"my_test_list":["756596263-0","743349523-371296","756112380-0","755061590-0"]}

Bisakah kalian memberi saya beberapa saran?

Saya menanyakan SQL di Presto.

1
Daniel Miranda 18 Juni 2020, 02:18

1 menjawab

Jawaban Terbaik

Apa yang Anda simpan di bawah kunci my_test_list adalah larik JSON, bukan nilai skalar - itulah sebabnya json_extract_scalar() mengembalikan null.

Agak tidak jelas bagaimana Anda ingin menggunakan data itu. Solusi tipikal adalah dengan cast ke array, yang kemudian dapat Anda gunakan sesuai kebutuhan, misalnya dengan menghapus sarangnya. Sintaks dasarnya adalah:

cast(json_extract(mycol, '$.my_test_list') as array(varchar))

Anda kemudian akan menggunakannya dalam gabungan lateral, seperti:

select t.mycol, x.myval
from mytable t
cross join unnest(
    cast(json_extract(mycol, '$.my_test_list') as array(varchar))
) as x(myval)
1
Piotr Findeisen 18 Juni 2020, 08:10