Split_Part w/negative integer does not work
The following documentation comment has been logged on the website:
Page: https://www.postgresql.org/docs/15/functions-string.html
Description:
When n is negative, an error occurs.
Documentation
split_part ( string text, delimiter text, n integer ) → text
Splits string at occurrences of delimiter and returns the n'th field
(counting from one), or when n is negative, returns the |n|'th-from-last
field.
split_part('abc~@~def~@~ghi', '~@~', 2) → def
split_part('abc,def,ghi,jkl', ',', -2) → ghi
Observation
SELECT split_part('abc,def,ghi,jkl', ',', -1);
generates
ERROR: field position must be greater than zero
SQL state: 22023
Or in code
DO $$
DECLARE
mytxt text;
BEGIN
mytxt = split_part('abc,def,ghi,jkl', ',', -1);
RAISE NOTICE '%', mytxt;
END $$
ERROR: field position must be greater than zero
CONTEXT: SQL statement "SELECT split_part('abc,def,ghi,jkl', ',', -1)"
PL/pgSQL function inline_code_block line 6 at assignment
SQL state: 22023
On 24/03/2023 21:45 CET PG Doc comments form <noreply@postgresql.org> wrote:
The following documentation comment has been logged on the website:
Page: https://www.postgresql.org/docs/15/functions-string.html
Description:When n is negative, an error occurs.
Documentation
split_part ( string text, delimiter text, n integer ) → text
Splits string at occurrences of delimiter and returns the n'th field
(counting from one), or when n is negative, returns the |n|'th-from-last
field.
split_part('abc~@~def~@~ghi', '~@~', 2) → def
split_part('abc,def,ghi,jkl', ',', -2) → ghiObservation
SELECT split_part('abc,def,ghi,jkl', ',', -1);
generates
ERROR: field position must be greater than zero
SQL state: 22023
Works on 14 and 15. Support for negative indexes was added in 14. What
version do you use?
https://www.postgresql.org/docs/14/release-14.html#id-1.11.6.12.5.8
--
Erik
PG Doc comments form <noreply@postgresql.org> writes:
Page: https://www.postgresql.org/docs/15/functions-string.html
Documentation
split_part ( string text, delimiter text, n integer ) → text
Splits string at occurrences of delimiter and returns the n'th field
(counting from one), or when n is negative, returns the |n|'th-from-last
field.
split_part('abc~@~def~@~ghi', '~@~', 2) → def
split_part('abc,def,ghi,jkl', ',', -2) → ghi
Observation
SELECT split_part('abc,def,ghi,jkl', ',', -1);
generates
ERROR: field position must be greater than zero
SQL state: 22023
Apparently, you are reading the v15 documentation and expecting it
to be exactly correct for some older server version. The described
behavior came in in v14.
regards, tom lane