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
相关产品推荐
相关产品推荐

