mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
array_offset() and array_offsets()
These functions return the offset position or positions of a value in an array. Author: Pavel Stěhule Reviewed by: Jim Nasby
This commit is contained in:
@ -366,6 +366,106 @@ SELECT array_cat(ARRAY[[3,4],[5,6]], ARRAY[1,2]) AS "{{3,4},{5,6},{1,2}}";
|
||||
{{3,4},{5,6},{1,2}}
|
||||
(1 row)
|
||||
|
||||
SELECT array_offset(ARRAY[1,2,3,4,5], 4);
|
||||
array_offset
|
||||
--------------
|
||||
4
|
||||
(1 row)
|
||||
|
||||
SELECT array_offset(ARRAY[5,3,4,2,1], 4);
|
||||
array_offset
|
||||
--------------
|
||||
3
|
||||
(1 row)
|
||||
|
||||
SELECT array_offset(ARRAY[[1,2],[3,4]], 3);
|
||||
ERROR: searching for elements in multidimensional arrays is not supported
|
||||
SELECT array_offset(ARRAY['sun','mon','tue','wed','thu','fri','sat'], 'mon');
|
||||
array_offset
|
||||
--------------
|
||||
2
|
||||
(1 row)
|
||||
|
||||
SELECT array_offset(ARRAY['sun','mon','tue','wed','thu','fri','sat'], 'sat');
|
||||
array_offset
|
||||
--------------
|
||||
7
|
||||
(1 row)
|
||||
|
||||
SELECT array_offset(ARRAY['sun','mon','tue','wed','thu','fri','sat'], NULL);
|
||||
array_offset
|
||||
--------------
|
||||
|
||||
(1 row)
|
||||
|
||||
SELECT array_offset(ARRAY['sun','mon','tue','wed','thu',NULL,'fri','sat'], NULL);
|
||||
array_offset
|
||||
--------------
|
||||
6
|
||||
(1 row)
|
||||
|
||||
SELECT array_offset(ARRAY['sun','mon','tue','wed','thu',NULL,'fri','sat'], 'sat');
|
||||
array_offset
|
||||
--------------
|
||||
8
|
||||
(1 row)
|
||||
|
||||
SELECT array_offsets(NULL, 10);
|
||||
array_offsets
|
||||
---------------
|
||||
|
||||
(1 row)
|
||||
|
||||
SELECT array_offsets(NULL, NULL::int);
|
||||
array_offsets
|
||||
---------------
|
||||
|
||||
(1 row)
|
||||
|
||||
SELECT array_offsets(ARRAY[1,2,3,4,5,6,1,2,3,4,5,6], 4);
|
||||
array_offsets
|
||||
---------------
|
||||
{4,10}
|
||||
(1 row)
|
||||
|
||||
SELECT array_offsets(ARRAY[[1,2],[3,4]], 4);
|
||||
ERROR: searching for elements in multidimensional arrays is not supported
|
||||
SELECT array_offsets(ARRAY[1,2,3,4,5,6,1,2,3,4,5,6], NULL);
|
||||
array_offsets
|
||||
---------------
|
||||
{}
|
||||
(1 row)
|
||||
|
||||
SELECT array_offsets(ARRAY[1,2,3,NULL,5,6,1,2,3,NULL,5,6], NULL);
|
||||
array_offsets
|
||||
---------------
|
||||
{4,10}
|
||||
(1 row)
|
||||
|
||||
SELECT array_length(array_offsets(ARRAY(SELECT 'AAAAAAAAAAAAAAAAAAAAAAAAA'::text || i % 10
|
||||
FROM generate_series(1,100) g(i)),
|
||||
'AAAAAAAAAAAAAAAAAAAAAAAAA5'), 1);
|
||||
array_length
|
||||
--------------
|
||||
10
|
||||
(1 row)
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
o int;
|
||||
a int[] := ARRAY[1,2,3,2,3,1,2];
|
||||
BEGIN
|
||||
o := array_offset(a, 2);
|
||||
WHILE o IS NOT NULL
|
||||
LOOP
|
||||
RAISE NOTICE '%', o;
|
||||
o := array_offset(a, 2, o + 1);
|
||||
END LOOP;
|
||||
END
|
||||
$$ LANGUAGE plpgsql;
|
||||
NOTICE: 2
|
||||
NOTICE: 4
|
||||
NOTICE: 7
|
||||
-- operators
|
||||
SELECT a FROM arrtest WHERE b = ARRAY[[[113,142],[1,147]]];
|
||||
a
|
||||
|
@ -185,6 +185,39 @@ SELECT array_cat(ARRAY[1,2], ARRAY[3,4]) AS "{1,2,3,4}";
|
||||
SELECT array_cat(ARRAY[1,2], ARRAY[[3,4],[5,6]]) AS "{{1,2},{3,4},{5,6}}";
|
||||
SELECT array_cat(ARRAY[[3,4],[5,6]], ARRAY[1,2]) AS "{{3,4},{5,6},{1,2}}";
|
||||
|
||||
SELECT array_offset(ARRAY[1,2,3,4,5], 4);
|
||||
SELECT array_offset(ARRAY[5,3,4,2,1], 4);
|
||||
SELECT array_offset(ARRAY[[1,2],[3,4]], 3);
|
||||
SELECT array_offset(ARRAY['sun','mon','tue','wed','thu','fri','sat'], 'mon');
|
||||
SELECT array_offset(ARRAY['sun','mon','tue','wed','thu','fri','sat'], 'sat');
|
||||
SELECT array_offset(ARRAY['sun','mon','tue','wed','thu','fri','sat'], NULL);
|
||||
SELECT array_offset(ARRAY['sun','mon','tue','wed','thu',NULL,'fri','sat'], NULL);
|
||||
SELECT array_offset(ARRAY['sun','mon','tue','wed','thu',NULL,'fri','sat'], 'sat');
|
||||
|
||||
SELECT array_offsets(NULL, 10);
|
||||
SELECT array_offsets(NULL, NULL::int);
|
||||
SELECT array_offsets(ARRAY[1,2,3,4,5,6,1,2,3,4,5,6], 4);
|
||||
SELECT array_offsets(ARRAY[[1,2],[3,4]], 4);
|
||||
SELECT array_offsets(ARRAY[1,2,3,4,5,6,1,2,3,4,5,6], NULL);
|
||||
SELECT array_offsets(ARRAY[1,2,3,NULL,5,6,1,2,3,NULL,5,6], NULL);
|
||||
SELECT array_length(array_offsets(ARRAY(SELECT 'AAAAAAAAAAAAAAAAAAAAAAAAA'::text || i % 10
|
||||
FROM generate_series(1,100) g(i)),
|
||||
'AAAAAAAAAAAAAAAAAAAAAAAAA5'), 1);
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
o int;
|
||||
a int[] := ARRAY[1,2,3,2,3,1,2];
|
||||
BEGIN
|
||||
o := array_offset(a, 2);
|
||||
WHILE o IS NOT NULL
|
||||
LOOP
|
||||
RAISE NOTICE '%', o;
|
||||
o := array_offset(a, 2, o + 1);
|
||||
END LOOP;
|
||||
END
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- operators
|
||||
SELECT a FROM arrtest WHERE b = ARRAY[[[113,142],[1,147]]];
|
||||
SELECT NOT ARRAY[1.1,1.2,1.3] = ARRAY[1.1,1.2,1.3] AS "FALSE";
|
||||
|
Reference in New Issue
Block a user