Обсуждение: 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) → ghi > > Observation > 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