2016-08-04 21 views

Antwort

3

UNNEST Array mit jsonb_array_elements(), sortieren ihre Elemente und aggregieren sie mit jsonb_agg():

with the_data(val) as (values ('[3,6,78,1]'::jsonb)) 

select jsonb_agg(value) as val 
from (
    select value 
    from the_data, jsonb_array_elements(val) 
    order by value 
    ) s; 

     val  
--------------- 
[1, 3, 6, 78] 
(1 row) 

Sie die Abfrage in einer benutzerdefinierten Funktion verwenden können, die in komplizierteren Abfragen nützlich sein wird:

create or replace function jsonb_sort_array(val jsonb) 
returns jsonb language sql as $$ 
    select jsonb_agg(value) 
    from (
     select value 
     from jsonb_array_elements(val) 
     order by value 
     ) s 
$$; 

with the_data(val) as (values ('[3,6,78,1]'::jsonb)) 

select jsonb_sort_array(val) as val 
from the_data; 

     val  
--------------- 
[1, 3, 6, 78] 
(1 row)