用于过滤string[]类型字段的PostgreSQL查询

h4cxqtbf  于 12个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(127)

我在数据库中有一个名为land的表,其中包含字段landType,landType是一个字符串数组(string[]),我需要编写一个查询,通过输入例如“N”,如果数组的任何元素包含字母“N”,则返回行,尝试了几个小时,但没有运气
prisma.$queryRaw SELECT * FROM "Land" where "constructionType" = "N" ;

wlzqhblo

wlzqhblo1#

您尚未指明是否希望比较区分大小写。假设区分大小写,则:

create table str_array(id integer, "landType" varchar[]);

insert into 
   str_array 
values (1, array['New land', 'test']), (2, array['Old land', 'test2']);

select * from str_array where strpos(array_to_string("landType", ','), 'N') > 0;

id |     landType      
----+-------------------
  1 | {"New land",test}

字符串
array_to_string从这里Array functions将数组元素转换为字符串,其中每个元素由,分隔。然后strpos从这里String functions搜索并返回子字符串的第一个索引("N")如果未找到子字符串,则返回的索引将为0。因此,查询将在> 0上进行筛选,这表明至少有一个数组中的"N"

pcrecxhr

pcrecxhr2#

可能只是将数组强制转换为text

SELECT * FROM "Land" WHERE "landType"::text ~ 'N';

字符串
或者~*不区分大小写。不会很快,这只对大表有影响。

相关问题