Thread: String Concatenation

String Concatenation

From
"Luiz K. Matsumura"
Date:
I want to concatenate 2 fields :
tpmov char(4)  | dsmov char(10)
---------------+----------------
AB             | SOMETHING
 
If I do:
 
SELECT tpmov || dsmov as History ...
 
if the field tpmov has a fixed lenght of char(4) the result
expected (I suppose) may be
 
History
--------------
AB  SOMETHING
 
But Postgres returns
 
History
------------
ABSOMETHING
 
Why this occurs ?
How I can get the first result ( AB__SOMETHING ) ?
 
If I do a select with the literal strings the result is as expected :
 
SELECT 'AB  ' || 'SOMETHING' AS History ;
 
History
--------------
AB  SOMETHING
 
My reasoning is wrong or this is a bug ?
 
 

Re: String Concatenation

From
"John Brookes"
Date:
 
----- Original Message -----
Sent: Friday, July 23, 2004 9:00 AM
Subject: [NOVICE] String Concatenation

I want to concatenate 2 fields :
tpmov char(4)  | dsmov char(10)
---------------+----------------
AB             | SOMETHING
 
If I do:
 
SELECT tpmov || dsmov as History ...
 
if the field tpmov has a fixed lenght of char(4) the result
expected (I suppose) may be
 
History
--------------
AB  SOMETHING
 
But Postgres returns
 
History
------------
ABSOMETHING
 
Why this occurs ?
How I can get the first result ( AB__SOMETHING ) ?
 
If I do a select with the literal strings the result is as expected :
 
SELECT 'AB  ' || 'SOMETHING' AS History ;
 
History
--------------
AB  SOMETHING
 
My reasoning is wrong or this is a bug ?
 
 

Re: String Concatenation

From
Tom Lane
Date:
"Luiz K. Matsumura" <luiz@planit.com.br> writes:
> My reasoning is wrong or this is a bug ?

This is a debatable issue.  See the thread starting here:
    http://archives.postgresql.org/pgsql-bugs/2004-07/msg00156.php
for some recent debate.  (What is not brought out in that particular
thread is that our pre-7.4 behavior was also surprising, just in
different places.  Trawling the archives for awhile may convince you
that 7.4 is better, or not.)

The bottom line in my mind is that the SQL spec's treatment of padding
space characters is very inconsistent, and so you're best off to use a
datatype that doesn't consider trailing spaces as special --- ie, use
varchar or text, and avoid char(n) like the plague.

            regards, tom lane