Re: Trim not working (PostgreSQL 9.1.2 on Win64) - Mailing list pgsql-general

From Adrian Klaver
Subject Re: Trim not working (PostgreSQL 9.1.2 on Win64)
Date
Msg-id 50147348.3020301@gmail.com
Whole thread Raw
In response to Re: Trim not working (PostgreSQL 9.1.2 on Win64)  (Edson Richter <edsonrichter@hotmail.com>)
Responses Re: Trim not working (PostgreSQL 9.1.2 on Win64)
List pgsql-general
On 07/28/2012 03:20 PM, Edson Richter wrote:
> Em 28/07/2012 13:46, Adrian Klaver escreveu:
>> On 07/27/2012 04:58 PM, Edson Richter wrote:
>>> I've a select with the following expression:
>>>
>>> select trim(both ' ' from substring(rslinha2 from 5 for position('(-)'
>>> in rslinha2)-6))
>>>             from ...
>>>
>>> problem is that the spaces are not being removed from either side. What
>>> would be wrong?
>>
>> FYI the '' is redundant, empty spaces are removed by default.
>> Some examples of what is in rslinha2 before the above and what you are
>> seeing after would help.
>>
>>>
>>> Thanks for your help,
>>> --
>>>
>>> *Edson Carlos Ericksson Richter*
>>> /SimKorp Informática Ltda/
>>> Fone:     (51) 3366-7964
>>> Celular:     (51)9318-9766/(51) 8585-0796
>>> Embedded Image
>>>
>>>
>>
>>
> Yes, I know the redundancy. Nevertheless, it did not work.
> The information about the data follows:
>
> rslinha2 character varying
>
> content for rslinha2 (this is one of several, but they are similar -
> data has been imported into this field from file using foreign table
> with file_fdw):
>
> "2. TAXA VIGILANCIA                                   (+) R$ 13,00"
>
> resulting substring expression is:
>
> " TAXA VIGILANCIA                                   "
>
> (1 space at beginning, and several after)
>
> If I do apply trim over the substring, no spaces are removed, and I
> cannot understand why.
>
> Complete (not working) expression are:
>
>
-------------------------------------------------------------------------------------------------------------------------
>
> select trim(both ' ' from substring(rslinha2 from 5 for position('(+)'
> in rslinha2)-6))
>              from ...
>
-------------------------------------------------------------------------------------------------------------------------
>
>
> or
>
>
-------------------------------------------------------------------------------------------------------------------------
>
> select trim(substring(rslinha2 from 5 for position('(+)' in rslinha2)-6))
>              from ...
>
-------------------------------------------------------------------------------------------------------------------------
>
>
> But using the regular expression matching "^\s*" and "\s*$" works, and
> spaces are removed:
>
>
-------------------------------------------------------------------------------------------------------------------------
>
> select regexp_replace(regexp_replace(substring(rslinha2 from 5 for
> position('(+)' in rslinha2)-6)), '^\s*', ''), '\s*$', '');
>
-------------------------------------------------------------------------------------------------------------------------
>
>
>
> Maybe I've hit a bug in Postgres, or just I could not fully understand
> the usage for trim (I admit, I was expecting trim to behave like in MS
> SQL or Java).

Well I am a little confused.
First the position marker changed from '-' to '+'
Second when I apply the above I get:
AXA VIGILANCIA for a length of 14.

Given that the substring is from 5 for .. that looks reasonable. Not
sure how you are getting TAXA... That would imply start from 4.

>
>
> Edson.
>
>


--
Adrian Klaver
adrian.klaver@gmail.com

pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: Trim not working (PostgreSQL 9.1.2 on Win64)
Next
From: Edson Richter
Date:
Subject: Re: Trim not working (PostgreSQL 9.1.2 on Win64)