以随机顺序从 JSON 数组中获取元素
Get elements from JSON array in random order
使用 PostgreSQL 9.4,我在 plpgsql 代码中将数据存储为 JSON 数组,例如:
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
- 创建新的键数组(从 0 到 4)
SELECT INTO intarray array_agg(s.n)
FROM (SELECT generate_series(0,json_array_length(j)-1) AS n
ORDER BY random()) s
- 在主循环中,根据新数组的值从 j 数组获取值
FOR i1 IN 0..(json_array_length(j)-1) LOOP
RAISE NOTICE 'i1=%', j->>(intarray[i1]);
END LOOP;
使用generate_series():
select '[1,2,3,4,5]'::json->>(i)
from generate_series(0, 4) i
order by random();
保持简单,只需使用 json_array_elements_text
和 ORDER 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;
使用 PostgreSQL 9.4,我在 plpgsql 代码中将数据存储为 JSON 数组,例如:
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
- 创建新的键数组(从 0 到 4)
SELECT INTO intarray array_agg(s.n)
FROM (SELECT generate_series(0,json_array_length(j)-1) AS n
ORDER BY random()) s
- 在主循环中,根据新数组的值从 j 数组获取值
FOR i1 IN 0..(json_array_length(j)-1) LOOP
RAISE NOTICE 'i1=%', j->>(intarray[i1]);
END LOOP;
使用generate_series():
select '[1,2,3,4,5]'::json->>(i)
from generate_series(0, 4) i
order by random();
保持简单,只需使用 json_array_elements_text
和 ORDER 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;