Search Postgresql Archives

Re: deleting from arrays

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Jan 16, 2005 at 11:56:04PM -0600, mstory@xxxxxxxxxxxx wrote:
> 
> I've searched the documentation for a simple way to delete a single value from
> an array, i've come up with a complecated way to do it, but was wondering if
> there was some simple command to remove a single value from an array, where the
> position of the value in the array is unknown.

For integer arrays see the contrib/intarray module.  Otherwise you
could write a function and create an operator around it -- maybe
there's an easier way, but the following works for arrays of any
type in simple tests:

CREATE FUNCTION array_remove(anyarray, anyelement) RETURNS anyarray AS '
DECLARE
    a     ALIAS FOR $1;
    v     ALIAS FOR $2;
    newa  a%TYPE := ''{}'';
    i     integer;
BEGIN
    FOR i IN array_lower(a, 1) .. array_upper(a, 1) LOOP
        IF a[i] <> v THEN
            newa := array_append(newa, a[i]);
        END IF;
    END LOOP;

    RETURN newa;
END;
' LANGUAGE plpgsql IMMUTABLE STRICT;

CREATE OPERATOR - (
    LEFTARG   = anyarray,
    RIGHTARG  = anyelement,
    PROCEDURE = array_remove
);

SELECT '{bob,carol,ted,alice}'::text[] - 'carol';
    ?column?     
-----------------
 {bob,ted,alice}
(1 row)

SELECT '{2,3,5,7}'::int[] - 3;
 ?column? 
----------
 {2,5,7}
(1 row)

-- 
Michael Fuhr
http://www.fuhr.org/~mfuhr/

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
    (send "unregister YourEmailAddressHere" to majordomo@xxxxxxxxxxxxxx)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux