Обсуждение: Equal test on strings doesn't ignore trailing spaces if the function 'lower' is applied

Поиск
Список
Период
Сортировка

Equal test on strings doesn't ignore trailing spaces if the function 'lower' is applied

От
"Alain TESIO"
Дата:
I have to apply rtrim explicitely if the string to
compare has been converted to lowercase :


dip=> create table testlower ( t char(50) );
CREATE
dip=> insert into testlower values ( 'Aa' );
INSERT 1257077 1
dip=> select t from testlower where t='Aa';
t
--------------------------------------------------
Aa
(1 row)
dip=> select t from testlower where lower(t)='aa';
t
-
(0 rows)
dip=> select t from testlower where rtrim(lower(t))='aa';
t
--------------------------------------------------
Aa
(1 row)



"Alain TESIO" <tesio@easynet.fr> writes:
> I have to apply rtrim explicitely if the string to
> compare has been converted to lowercase :

lower() is a text function, not a fixed-length-char function,
so the result of lower() is assumed to have significant trailing
blanks.  It's not clear to me that the behavior you're complaining
about is a bug.

I'd suggest using varchar or text if you are dealing with strings
that are actually variable-length.

            regards, tom lane