这是我想要做的总结:
$array[0] = 1;
$array[1] = 2;
$sql = "SELECT * FROM table WHERE some_id = $array"
Run Code Online (Sandbox Code Playgroud)
显然有一些语法问题,但这就是我想要做的,而且我还没有发现任何显示如何做的事情.
目前,我的计划是按照以下方式做点什么:
foreach($idList as $is)
$where .= 'some_id=' . $id . ' OR';
endforeach
$sql = "SELECT * FROM table WHERE " . $where;
Run Code Online (Sandbox Code Playgroud)
那么PostgreSQL中是否支持使用数组进行搜索,或者我是否必须执行与我的解决方案类似的操作?
Qua*_*noi 117
SELECT *
FROM table
WHERE some_id = ANY(ARRAY[1, 2])
Run Code Online (Sandbox Code Playgroud)
或ANSI
兼容:
SELECT *
FROM table
WHERE some_id IN (1, 2)
Run Code Online (Sandbox Code Playgroud)
该ANY
语法是首选,因为该阵列作为一个整体可在绑定的变量进行传递:
SELECT *
FROM table
WHERE some_id = ANY(?::INT[])
Run Code Online (Sandbox Code Playgroud)
您需要传递数组的字符串表示形式: {1,2}
对于动态 SQL 使用:
'IN(' ||array_to_string(some_array, ',')||')'
DO LANGUAGE PLPGSQL $$
DECLARE
some_array bigint[];
sql_statement text;
BEGIN
SELECT array[1, 2] INTO some_array;
RAISE NOTICE '%', some_array;
sql_statement := 'SELECT * FROM my_table WHERE my_column IN(' ||array_to_string(some_array, ',')||')';
RAISE NOTICE '%', sql_statement;
END;
$$;
Run Code Online (Sandbox Code Playgroud)
结果:
NOTICE: {1,2}
NOTICE: SELECT * FROM my_table WHERE my_column IN(1,2)
就我而言,我需要使用包含数据的列,因此使用 IN() 不起作用。感谢@Quassnoi 提供的示例。这是我的解决方案:
SELECT column(s) FROM table WHERE expr|column = ANY(STRING_TO_ARRAY(column,',')::INT[])
Run Code Online (Sandbox Code Playgroud)
我花了将近 6 个小时才偶然发现这个帖子。
归档时间: |
|
查看次数: |
70566 次 |
最近记录: |