Re: BUG #14441: trim function bug (hit a keyword somewhere internally) - Mailing list pgsql-bugs

From Tom Lane
Subject Re: BUG #14441: trim function bug (hit a keyword somewhere internally)
Date
Msg-id 17020.1480487044@sss.pgh.pa.us
Whole thread Raw
In response to BUG #14441: trim function bug (hit a keyword somewhere internally)  (mark.pether@gmail.com)
List pgsql-bugs
mark.pether@gmail.com writes:
> select TRIM(LEADING 'EXCLUDE' FROM 'C001');
> Will incorrectly strip off the 'C' leaving '001'.

The code appears to believe that the first argument is a set of characters
that are to be removed from the front of the string argument until none
remain.  For instance:

regression=3D# select TRIM(LEADING 'ABC' FROM 'CAABC001');
 ltrim =

-------
 001
(1 row)

So the behavior you mention is expected.

I think what you're expecting is to strip off one or more occurrences of a
substring, but that's not what our version of TRIM does.

A look at the SQL standard indicates that it requires the first argument
to be *exactly one* character in length, and then TRIM strips leading
occurrence(s) of that character.  So our existing implementation is a
plausible extension of that ... as is your expectation, but there's
certainly no reason to favor yours over what's there.  Also:
* the PG code has acted this way since it was introduced in 1997.
* the code comments claim, and a bit of googling seems to confirm,
that this matches Oracle's behavior.
So I do not see us changing this.

You can easily build the behavior you want out of other spare parts.
Regexes would be my first weapon of choice:

regression=3D# select substring('C001' from '^(?:EXCLUDE)*(.*)$');
 substring =

-----------
 C001
(1 row)

regression=3D# select substring('EXCLUDEC001' from '^(?:EXCLUDE)*(.*)$');
 substring =

-----------
 C001
(1 row)

regression=3D# select substring('EXCLUDEEXCLUDEC001' from '^(?:EXCLUDE)*(.=
*)$');
 substring =

-----------
 C001
(1 row)

See
https://www.postgresql.org/docs/current/static/functions-matching.html#FUN=
CTIONS-POSIX-REGEXP

            regards, tom lane

pgsql-bugs by date:

Previous
From: David Gould
Date:
Subject: Re: BUG #14441: trim function bug (hit a keyword somewhere internally)
Next
From: mark pether
Date:
Subject: Re: BUG #14441: trim function bug (hit a keyword somewhere internally)