以随机顺序从JSON数组中获取元素

时间:2015-08-26 12:14:22

标签: sql json postgresql plpgsql

使用PostgreSQL 9.4,我将数据作为JSON数组存储在plpgsql代码中,例如:

j := '[1,2,3,4,5]'::json

接下来,我遍历这个数组并用数字做一些事情。

FOR i1 IN 0..(json_array_length(j)-1) LOOP
   RAISE NOTICE 'i1=%', j->>(i1);
END LOOP;

我得到了这个输出:

1
2
3
4
5

如何获得循环的随机排序顺序?像:

3
5
1
2
4

3 个答案:

答案 0 :(得分:2)

保持简单,只需使用json_array_elements_textORDER BY random()

  DECLARE
    item text
  BEGIN
    FOR item IN
      SELECT json_array_elements_text('[1,2,3,4,5]'::json) ORDER BY random()
    LOOP
       RAISE NOTICE 'item is %',item;
    END LOOP;
  END;

答案 1 :(得分:1)

  1. 制作新的密钥数组(从0到4)
  2. SELECT INTO intarray array_agg(s.n)
    FROM (SELECT generate_series(0,json_array_length(j)-1) AS n
    ORDER BY random()) s
    
    1. 在主循环中,从新数组
    2. 获取j数组中的值
      FOR i1 IN 0..(json_array_length(j)-1) LOOP
      
         RAISE NOTICE 'i1=%', j->>(intarray[i1]);
      
      END LOOP;
      

答案 2 :(得分:1)

使用generate_series():

select '[1,2,3,4,5]'::json->>(i) 
from generate_series(0, 4) i
order by random();