I'm using cvs-current, and testing those build-in function
according to the docs. 
but it seems the "lpad", "rpad" don't work,
when I type:
select lpad('laser', 4, 'a');
in psql, the result is still 
'laser', the same with 'rpad',
Is it a bug or I'm mis-understaning the lpad and/or rpad functions?

Regards

Laser







I'm using cvs-current, and testing those 
build-in function
according to the docs. 
but it seems the "lpad", 
"rpad" don't work,
when I type:
select lpad('laser', 4, 'a');
in psql, the result is still 
'laser', the same with 'rpad',
Is it a bug or I'm mis-understaning the lpad and/or rpad 
functions?
 
Regards
 
Laser
Tue, 28 Nov 2000 16:58:44 +0800
"He weiping" <laser@zhengmai.com.cn>
is it a bug?
> ... it seems the "lpad", "rpad" don't work,
> when I type:
> select lpad('laser', 4, 'a');
> in psql, the result is still
> 'laser', the same with 'rpad',
> Is it a bug or I'm mis-understaning the lpad and/or rpad functions?

A simple misunderstanding. The length argument is for the *total*
length. So padding a 5 character string to a length of 4 will do
nothing. But padding to a length of 6 will add a single "a" to the
string.

                        - Thomas

Tue, 28 Nov 2000 14:48:21 +0000
Thomas Lockhart <lockhart@alumni.caltech.edu>
Re: [HACKERS] is it a bug?
"He weiping" <laser@zhengmai.com.cn> writes:
> but it seems the "lpad", "rpad" don't work,
> when I type:
> select lpad('laser', 4, 'a');
> in psql, the result is still=20
> 'laser', the same with 'rpad',
> Is it a bug or I'm mis-understaning the lpad and/or rpad functions?

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?

			regards, tom lane

Tue, 28 Nov 2000 10:09:57 -0500
Tom Lane <tgl@sss.pgh.pa.us>
Re: is it a bug? 
Hi,

I think you've misunderstood the purpose of the functions.
They exist to *pad* the strings, not to truncate them.
Your examples will both return 'laser' because char_length('laser') = 5
and you asked for a padded length of 4.

Had you done this: select lpad('laser', 8, '*');
You would get this: ***laser

... and obviously with rpad() you would have seen 'laser***' instead.

If you want to truncate strings, try this:
select substring('laser' from 1 for 4);
... which will truncate to length 4, i.e. 'lase'

I couldn't find a combination function that will perform both of these
functions in one. However, you could try a construct like this:

select rpad(substring('laser' from 1 for xx), xx, '*');

... where 'xx' is the number of characters you want in the final string.
I'm sure you could wrap a user-defined function around this to that
you'd only have to feed in the number of characters once instead of
twice. Perhaps someone else knows a better way of doing this?

Hope this helps

Francis Solomon

>I'm using cvs-current, and testing those build-in function
>according to the docs.
>but it seems the "lpad", "rpad" don't work,
>when I type:
>select lpad('laser', 4, 'a');
>in psql, the result is still
>'laser', the same with 'rpad',
>Is it a bug or I'm mis-understaning the lpad and/or rpad functions?
>
>Regards
>
>Laser


Wed, 29 Nov 2000 12:32:09 -0000
"Francis Solomon" <francis@stellison.co.uk>
RE: is it a bug?