Postgresql ILIKE/LIKE ANY在使用模式时不返回任何结果
我在PostgreSQL db版本12.1中有一个表foods,它有一个名为common_names的列,这是一个文本数组Text[]。在数据中,术语“族样式”在数据库中的“常用名称”条目中出现35次 以下3个查询都返回值“35”: 从食物中选择count1,其中“家庭风格”=任何普通名称 从食物中选择count1,其中“家庭风格”与任何普通名称一样 从“家庭风格”我喜欢的食物中选择count1 以下所有查询都返回零0: 从食物中选择count1,其中“%family%”与任何常用名称一样 从食物中选择count1,其中“%family%”我喜欢任何常用名称 从食物中选择count1,其中“family%”与任何常用名称一样 从“FAMILY%”我喜欢任何常用名称的食品中选择count1Postgresql ILIKE/LIKE ANY在使用模式时不返回任何结果,sql,postgresql,Sql,Postgresql,我在PostgreSQL db版本12.1中有一个表foods,它有一个名为common_names的列,这是一个文本数组Text[]。在数据中,术语“族样式”在数据库中的“常用名称”条目中出现35次 以下3个查询都返回值“35”: 从食物中选择count1,其中“家庭风格”=任何普通名称 从食物中选择count1,其中“家庭风格”与任何普通名称一样 从“家庭风格”我喜欢的食物中选择count1 以下所有查询都返回零0: 从食物中选择count1,其中“%family%”与任何常用名称一样 从食
我做错了什么?图案在右边,就像没有图案一样。左手边的东西只是一个字符串,不是一个图案 以下结果为假:
SELECT '%family%' LIKE 'family style'
将RHS包装在ANYARRAY中[…]不会改变其含义。好的,在我的一位同事的帮助下,我们能够解决这个问题 因此,对于初学者来说,它看起来不像可以将like或ILIKE用于数组列——可以,它只是不能正常工作。似乎只能使用精确匹配 但是,您可以出于搜索目的取消对数组的测试 以下是最终有效的查询:
SELECT COUNT(1) FROM (
SELECT global_id, common_names FROM foods,
LATERAL unnest(common_names) AS common_names(common_name)
WHERE common_name LIKE '%family%'
GROUP BY global_id, common_names) AS X;
您可以在WHERE子句中完成这一切:
我不这么认为;ANY用于匹配数组中的任何项。另外,前三个命令使用这种格式,它们可以工作。文档示例如下:从sal_emp中选择*其中10000=按季度支付的任何工资;我想你没有领会他的意思。通配符跟在后面,比如。。。。如果存在,请从unnestcommonic_名称中选择1作为x,其中x与“%family%”无关,但count1实际上略慢于count*
where exists (select 1
from unnest(common_names) u(common_name)
where u.common_name like '%family%'
)