如何獲取PostgreSQL數組中值的位置? Python的.index()
方法和PHP的array_search()
函數,但是我找不到PostgreSQL的這種函數。我應該寫一個存儲函數來做到這一點?我更喜歡使用內置函數來解決。在PostgreSQL數組中查找值的位置
16
A
回答
9
Since version 9.5,內置函數:array_position()
和array_positions()
,用於按值查找數組鍵(僅第一次出現)或鍵(所有出現)。
這些函數支持anyarray類型。
27
該documentation recommends使用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;
這將返回第一個匹配的指數,如果存在的話。如果您想要所有匹配,只需將RETURNS INT
更改爲RETURNS SETOF INT
即可。如果沒有找到匹配,此功能將返回NULL
。
此函數僅適用於一維數組。
另外,請記住,array_search(NULL, a)
總是返回NULL
,即使該數組包含null元素:
> SELECT array_search(null, array[1, 2, null, 4]);
array_search
--------------
(1 row)
這是因爲SQL認爲NULL = NULL
是未知(即NULL
)。見functions-comparison。如果你想array_search
能夠找到NULL
元素,改變
WHERE $2[i] = $1
到
WHERE $2[i] IS NOT DISTINCT FROM $1
4
對於整數數組只有可以使用大大快idx
function from the intarray
bundled extension。
不幸的是,這個函數還沒有被推廣到支持所有的數組類型,所以你被其他數組的SQL方法困住了。
相關問題
- 1. 在javascript數組中查找值的位置的表格
- 2. 在數組中查找子數組並返回它的位置
- 3. 查找在Fortran數組最接近的值的索引位置
- 4. PostgreSQL中的數組位置比較
- 5. PostgreSQL CASE:文本數組中的位置
- 6. 查找數組中包含值的位置
- 7. 如何在隨機位置查找數組的值?
- 8. 查找設置在位數組中的最高位(最左邊)
- 9. 使用Java查找Postgresql安裝位置
- 10. 在actionscript中查找對象在數組中的位置
- 11. 在紅寶石中查找位置值
- 12. PostgreSql查詢數組值
- 13. 在postgresql中查找行的哈希值
- 14. 查找數組的中值?
- 15. 在Matlab中找到三維數組的最小值的位置
- 16. 在Javascript中查找數組中的值
- 17. 找出一個值「適合」在一個數組中的位置?
- 18. 在數組中查找給定字符的每個位置
- 19. 在Matlab中標記和查找數組元素的位置
- 20. Java在數組中找到位置?
- 21. PostgreSQL - 在JSONB中的位置
- 22. 查找數組中的重複數據的位置
- 23. 在postgresql數據庫中查找包含非數字值的行
- 24. 在PostgreSQL中查找數組列中的字符串
- 25. 在PostgreSQL 9.5中檢查對象json中的數組中的值
- 26. 如何查找數組中某個特定數字的位置?
- 27. PostgreSQL中的地理位置查詢
- 28. 檢查值存在於數組中的位置
- 29. 在java中查找元素位置數組
- 30. 查找數組中值的平均值
+1 for generate_subscripts()和一個非常完整的答案。 – 2012-01-11 00:18:56
很好的答案。當PostgreSQL 9.4添加'WITH ORDINAL'函數時,這將變得更簡單和更高效,從而允許您只寫'unnest(the_array)WITH ORDINAL'。也許我應該爲9.4寫一個適當的'idx'函數,儘管... – 2013-07-26 02:59:11