我需要编写一个SQL(或SQL函数)来检查Postgres项目是否包含项目的切片。我将此项目称为'Item'。所以基本上'Item'看起来像这样:
x1c 0d1x的数据
e1的大小始终与e2相同。
现在有两个数组,我就叫它们a1和a2,看起来像这样。
“{B,c,d}”、“{2,3,4}”。
e2(a2)中的值必须与e1(a1)中的索引完全匹配,因此在本例中,表中的第1和第4项都将匹配,但第2或第3项不匹配。因此,如果2个数组是'{c,d}','{3,4}',则第1,第3和第4项将匹配。
我不知道如何做到这一点,我需要使用类似generate_series()的东西来生成所有可能的项目切片,然后检查吗?我现在有点困惑。
2条答案
按热度按时间idv4meu81#
该函数返回子数组
sub
的数组arr
中的索引,如果arr
不包含sub
,则返回0:字符串
用途:
型
bq9c1y662#
根据具体情况,您可以从数组中创建一个字符串,并使用
regex/like
查询它。这听起来像是一个天真的方法,结果比接受答案的
plpgsql
函数更快。至少在以下情况下:字符串
用Like查询
型
查询函数
型
当您需要匹配通配符时,性能上的差异变得更加明显:
型
与功能
型
我对表现上的差异感到惊讶。
也许是因为
plpgsql
比Regex的原生实现慢得多,后者很可能是非常优化的。也许在所创建的测试情况中有一些特殊的东西导致了性能上的优势。
此外,为了使字符串化解决方案可靠,您需要为
array_to_string
提供一个不在数组元素中出现的字符串。在某些情况下,这可能不可行。但除此之外,你可以考虑从数组中创建一个字符串,并用
like/regex
查询它。