[英]How to use LOWER() on elements of a jsonb column in PostgreSQL?
[英]Use jsonb structure in postgresql
我有一張桌子emp3
```
- id int not null
- lvl varchar
- includes jsonb
```
表結構:
ID | 等級 | 包括 |
---|---|---|
1 | jj~ii | null |
2 | jj~ii~aa | null |
3 | ii | null |
我想通過拆分“~”來根據 lvl 列更新包含列。 我可以這樣做:
```
do $$declare
i record;
tbl_var jsonb := null;
tbl_var1 text[];
part varchar;
begin
for i in select * from emp3 where includes is null
loop
if array_length(string_to_array(i.lvl, '~'), 1) is not null then
tbl_var1 := null;
foreach part in array string_to_array(i.lvl, '~')
loop
tbl_var1 := concat(tbl_var1, '{"lvls" : "',part,'"}');
UPDATE emp3 set includes = tbl_var1 where id = i.id;
end loop;
else
tbl_var := i.lvl;
UPDATE emp3 set includes = tbl_var where id = i.id;
end if;
end loop;
end $$;
```
Output 執行查詢后:
ID | 等級 | 包括 |
---|---|---|
1 | a~b | ["{"lvls": "a"}", "{"lvls": "b"}"] |
2 | a~b~c | ["{"lvls": "a"}", "{"lvls": "b"}","{"lvls": \c"}"] |
3 | 一個 | ["{"lvls": "a"}"] |
但我希望 output 采用這種格式:
ID | 等級 | 包括 |
---|---|---|
1 | a~b | [{“lvls”:“a”},{“lvls”:“b”}] |
2 | a~b~c | [{“lvls”:“a”},{“lvls”:“b”},{“lvls”:“c”}] |
3 | 一個 | [{"lvls": "a"}] |
沒有轉義字符並且 " 不附加在 dict 的開頭和結尾。如何實現
使用jsonb_build_object解決了這個問題:
array_append(tbl_var1, jsonb_build_object('lvls',part));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.