Обсуждение: AW: Re: [GENERAL] is it a bug?

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

AW: Re: [GENERAL] is it a bug?

От
Zeugswetter Andreas SB
Дата:
> lpad and rpad never truncate, they only pad.
>
> Perhaps they *should* truncate if the specified length is less than
> the original string length.  Does Oracle do that?

Yes, it truncates, same as Informix.

Andreas

Oracle-compatible lpad/rpad behavior

От
Tom Lane
Дата:
Zeugswetter Andreas SB <ZeugswetterA@wien.spardat.at> writes:
>> lpad and rpad never truncate, they only pad.
>>
>> Perhaps they *should* truncate if the specified length is less than
>> the original string length.  Does Oracle do that?

> Yes, it truncates, same as Informix.

I went to fix this and then realized I still don't have an adequate spec
of how Oracle defines these functions.  It would seem logical, for
example, that lpad might truncate on the left instead of the right,
ie lpad('abcd', 3, 'whatever') might yield 'bcd' not 'abc'.  Would
someone check?

Also, what happens if the specified length is less than zero?  Error,
or is it treated as zero?

            regards, tom lane

Re: [GENERAL] Oracle-compatible lpad/rpad behavior

От
"Jonathan Ellis"
Дата:
> I went to fix this and then realized I still don't have an adequate spec
> of how Oracle defines these functions.  It would seem logical, for
> example, that lpad might truncate on the left instead of the right,
> ie lpad('abcd', 3, 'whatever') might yield 'bcd' not 'abc'.  Would
> someone check?

SQL> select lpad('abcd', 3, 'foobar') from dual;

LPA
---
abc

> Also, what happens if the specified length is less than zero?  Error,
> or is it treated as zero?

SQL> select ':' || lpad('abcd', -1, 'foobar') || ':' from dual;

':
--
::

(colons added so it's obvious that it's a zero-length string)

-Jonathan


Re: Re: [GENERAL] Oracle-compatible lpad/rpad behavior

От
Hannu Krosing
Дата:
Jonathan Ellis wrote:
>
> > I went to fix this and then realized I still don't have an adequate spec
> > of how Oracle defines these functions.  It would seem logical, for
> > example, that lpad might truncate on the left instead of the right,
> > ie lpad('abcd', 3, 'whatever') might yield 'bcd' not 'abc'.  Would
> > someone check?
>
> SQL> select lpad('abcd', 3, 'foobar') from dual;
>
> LPA
> ---
> abc
>
> > Also, what happens if the specified length is less than zero?  Error,
> > or is it treated as zero?
>
> SQL> select ':' || lpad('abcd', -1, 'foobar') || ':' from dual;
>
> ':
> --
> ::
>
> (colons added so it's obvious that it's a zero-length string)

AFAIK Oracle is unable to distinguish NULL and zero-length string ;(

--------------
Hannu