如何将 postgres json 列表转换为全小写的 postgres 数组
How to convert a postgres json list to an all lowercase postgres array
我有一个名为 "stuff" 的 table,其中有一个名为 "tags" 的 json 列存储标签列表,还有一个名为 "id" 的列是 table 中每一行的主键。我正在使用 postgres 数据库。例如,一行看起来像这样
id | tags
---|------
1 | ["tag1", "tag2", "tag3"]
我正在尝试编写一个函数来获取具有与名为 "s_tag" 的输入标签变量相匹配的标签的行。但是,我想把所有的标签都转成小写,让标签匹配不区分大小写。
我写了以下测试查询:
select id from stuff where '"tag1"' = any(select jsonb_array_elements(tags));
此查询返回了所有具有名为 "tag1" 但没有 "TAG1" 标签的行的 ID。
然后我读了this post,所以我尝试了
select id from stuff where '"tag1"' like any(select jsonb_array_elements(tags));
但是我得到了这个错误:
ERROR: operator does not exist: unknown ~~* jsonb
那么如何将 json 列表转换成小写的 postgres 数组呢?或者是否有其他方法以不区分大小写的方式搜索标签列表?
您可以获得文本形式的结果而不是 json:
select id
from stuff
where 'tag1' = any(select lower(jsonb_array_elements_text(tags)));
我有一个名为 "stuff" 的 table,其中有一个名为 "tags" 的 json 列存储标签列表,还有一个名为 "id" 的列是 table 中每一行的主键。我正在使用 postgres 数据库。例如,一行看起来像这样
id | tags
---|------
1 | ["tag1", "tag2", "tag3"]
我正在尝试编写一个函数来获取具有与名为 "s_tag" 的输入标签变量相匹配的标签的行。但是,我想把所有的标签都转成小写,让标签匹配不区分大小写。
我写了以下测试查询:
select id from stuff where '"tag1"' = any(select jsonb_array_elements(tags));
此查询返回了所有具有名为 "tag1" 但没有 "TAG1" 标签的行的 ID。
然后我读了this post,所以我尝试了
select id from stuff where '"tag1"' like any(select jsonb_array_elements(tags));
但是我得到了这个错误:
ERROR: operator does not exist: unknown ~~* jsonb
那么如何将 json 列表转换成小写的 postgres 数组呢?或者是否有其他方法以不区分大小写的方式搜索标签列表?
您可以获得文本形式的结果而不是 json:
select id
from stuff
where 'tag1' = any(select lower(jsonb_array_elements_text(tags)));