Thread: is it a bug?
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
"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
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
> ... 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