PostgreSQL -如何使用正则表达式检查字符串A是否包含数字B?[副本]

sgtfey8w  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(172)

此问题已在此处有答案

PostgreSQL Regex Word Boundaries?(3个答案)
12天前关闭
我希望它只在数字B不在更大的数字内时才匹配。
我不希望它与此匹配:A =“12345”B = 234
我想让它和这个匹配:A =“94,234,88”B = 234
我试着看了一下postgresql文档,但是我完全迷路了。

ryoqjall

ryoqjall1#

将CSV数据以94, 234, 88直接存储在表中可能是糟糕的表设计。更好的设计是将每个CSV编号存储为单独的记录,例如

grp | val
1   | 94
1   | 234
1   | 88

然后,要搜索234,您只需要像下面这样的查询:

SELECT *
FROM yourNewTable
WHERE val = 234;

也就是说,您可以坚持当前的设计,并使用正则表达式来搜索单个数字:

SELECT *
FROM yourTable
WHERE val_csv ~ '\y234\y';
cnjp1d6j

cnjp1d6j2#

将列转换为int[],然后使用适当的数组运算符:

select ...
from ...
where B = any(('{' || A || '}')::int[])

请参见live demo
需要将字符串 Package 在{}中,以从裸CSV创建数组文字。

相关问题