运算符不存在:字符变化 = Postgres 中的记录
Posted
技术标签:
【中文标题】运算符不存在:字符变化 = Postgres 中的记录【英文标题】:Operator does not exist: character varying = record in Postgres 【发布时间】:2020-04-19 13:10:10 【问题描述】:我正在尝试在社区版的 postgres 中执行查询:
select COUNT(*)
from cdar_cpms_owner.hshldgrp_wkly_actvty
where wkly_actvty_cd IN (('B','H') ,'N')
从那个查询中,我得到了这个错误:
错误:运算符不存在:字符变化 = 记录
第 1 行: ..._owner.hshldgrp_wkly_actvty 其中 wkly_actvty_cd IN(('B','H... ^ 提示:没有运算符与给定的名称和参数类型匹配。您可能需要添加显式类型转换。
虽然相同的查询在 EDB 版本的 postgres 上运行良好。
谁能建议此查询需要进行哪些更改才能使其正常工作?
【问题讨论】:
('B','H')
应该是什么?这对我来说没有任何意义。你的意思是('(''B'',''H'')', 'N')
?
【参考方案1】:
这里:
where wkly_actvty_cd IN ( ('B','H'),'N')
您的列表有一个嵌套列表元素:('B','H')
。所以 Postgres 最终会尝试将标量值 (wkly_actvty_cd
) 与元组进行比较,这会引发您遇到的错误。
你说的是真的吗?
where wkly_actvty_cd IN ('B', 'H', 'N')
【讨论】:
不,我想与嵌套列表元素进行比较:('B','H') 和 'N'。奇怪的是,带有 wkly_actvty_cd IN (('B','H'),'N') 的 Enterprise Postgres 的查询工作正常,但在 Community Edition Postgres 中却不行。 @Saurabhwagh:请解释您想要比较的逻辑是什么。你想要wkly_actvty_cd
,其值为'B'
、'H
'或'N'
?还是别的什么(什么)?
对不起,但即使我也不确定这个完整的逻辑。我发现这个逻辑是用遗留代码编写的,我尝试使用这个where wkly_actvty_cd IN('N')
它也给了我与where wkly_actvty_cd IN ( ('B','H'),'N')
相同的计数。所以我认为where wkly_actvty_cd IN('N')
这个逻辑也适用于查询,如果我错了请纠正我。
@Saurabhwagh:我无法告诉你什么你想要的逻辑是什么。我只能告诉你如何实现一些逻辑,如果你能描述的话......以上是关于运算符不存在:字符变化 = Postgres 中的记录的主要内容,如果未能解决你的问题,请参考以下文章
SequelizeDatabaseError:运算符不存在:字符变化 [] @> 字符变化
PostgreSQL:错误:运算符不存在:整数 = 字符变化