Thread: 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 ?
----- Original Message -----From: Luiz K. MatsumuraSent: Friday, July 23, 2004 9:00 AMSubject: [NOVICE] String ConcatenationI want to concatenate 2 fields :tpmov char(4) | dsmov char(10)---------------+----------------AB | SOMETHINGIf I do:SELECT tpmov || dsmov as History ...if the field tpmov has a fixed lenght of char(4) the resultexpected (I suppose) may beHistory--------------AB SOMETHINGBut Postgres returnsHistory------------ABSOMETHINGWhy 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 SOMETHINGMy reasoning is wrong or this is a bug ?
"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