英文:
How to check if value in subset of array in Postgresql?
问题
我想在我的WHERE子句中设置一个条件,如果一个文本字段包含在语句中声明的数组的子集中,则返回true。这是使用PostgreSQL v15.1的示例语句:
SELECT 'case_1'::TEXT IN ((ARRAY['case_1', 'case_2', 'case_3'])[1:2]);
这应该声明一个包含case_1、2、3的数组,取数组的子集包含case_1、2,然后测试case_1是否在数组中。期望的结果是true。
实际行为是一个错误:"运算符 text=text[]"。
我理解IN()运算符是测试左操作数是否在右操作数中,右操作数具有一个维度。
如何更正语法以返回true或false,以确定case_1是否在数组的子集中?
英文:
I want put a condition in my WHERE clause that returns true if a text field is contained in a subset of an array declared in the statement. This is using postgres v15.1. I have simplified the statement to the following example:
SELECT 'case_1'::TEXT IN((ARRAY['case_1','case_2','case_3']) [1:2]);
This should declare an array containing the case_1,2,3, take a subset of the array containing case_1,2 and then test if case_1 is in the array. Expected result is true.
Actual behaviour is an error: "Operator does not exist text=text[]".
I understood the IN() operator is a test if the left hand argument is in the right hand argument which has a dimension.
How can I correct the syntax to return true or false if case_1 is in the subset of the array?
答案1
得分: 2
像错误消息所说,你的类型弄混了。
IN
关键字期望在括号中提供一个明确的项目列表。你提供了一个项目 - 一个数组。
你想要使用 ANY(...)
。
SELECT 'case_1' = ANY((ARRAY['case_1', 'case_2', 'case_3'])[1:2]);
英文:
Like the error says, you've got your types messed up.
The IN
keyword expects an explicit list of items in brackets. You have provided it with one item - an array.
You want ANY(...)
SELECT 'case_1' = ANY((ARRAY['case_1', 'case_2', 'case_3'])[1:2]);
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论