min*_*hee 23 arrays postgresql position
如何在PostgreSQL数组中获取值的位置?有.index()Python 的方法和array_search()PHP的函数,但我找不到PostgreSQL的任何这样的函数.我应该写一个存储函数来做到这一点吗?我更喜欢使用内置函数来解决.
Joe*_*ams 30
该文档建议使用的generate_subscripts功能.下面的函数模拟了PHP的array_search:
CREATE FUNCTION array_search(needle ANYELEMENT, haystack ANYARRAY)
RETURNS INT AS $$
SELECT i
FROM generate_subscripts($2, 1) AS i
WHERE $2[i] = $1
ORDER BY i
$$ LANGUAGE sql STABLE;
Run Code Online (Sandbox Code Playgroud)
这将返回第一个匹配的索引(如果存在).如果您想要所有比赛,只需更改RETURNS INT为RETURNS SETOF INT.NULL如果找不到匹配项,则返回此函数.
此功能仅适用于一维数组.
另外,请记住,即使数组包含null元素,也array_search(NULL, a)始终返回NULL:
> SELECT array_search(null, array[1, 2, null, 4]);
array_search
--------------
(1 row)
Run Code Online (Sandbox Code Playgroud)
这是因为SQL认为NULL = NULL是未知的(即NULL).参见函数比较.如果您希望array_search能够找到NULL元素,请进行更改
WHERE $2[i] = $1
Run Code Online (Sandbox Code Playgroud)
至
WHERE $2[i] IS NOT DISTINCT FROM $1
Run Code Online (Sandbox Code Playgroud)