You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中translate结果与ANY数组比较返回false问题咨询

问题原因及解决方法

问题原因

原SQL返回false的核心是左右两边的字符串内容不一致:

  • 左边:translate('owner="ganga','"', '')会把输入字符串中的双引号完全移除,最终得到字符串 owner=ganga
  • 右边:数组字面量'{owner="ganga}'解析后,数组中的元素是 owner="ganga(保留了原有的双引号)
    两者内容不匹配,因此比较结果为false。

当你移除语句中的双引号后,左边translate处理后仍是owner=ganga,右边数组元素也是owner=ganga,内容一致,所以返回预期的true。

解决方法

根据实际需求,有两种常见处理方式:

方式1:统一对数组元素移除双引号

如果需要让右边数组的元素也去掉双引号后再比较,可以通过unnest展开数组,对每个元素执行translate后重新组成数组:

SELECT translate('owner="ganga','"', '') = ANY(
  ARRAY(SELECT translate(unnest('{owner="ganga}'::text[]), '"', ''))
);

方式2:直接修改数组字面量

如果你的预期是右边数组的元素本身就应该是去掉双引号后的内容,直接修改数组字面量即可:

SELECT translate('owner="ganga','"', '') = ANY('{owner=ganga}');

内容的提问来源于stack exchange,提问作者Rajesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 04:25:25