Обсуждение: Strange Result with char concatenation in query.
Hello, A short example, is IMHO more explicit : % cat file.csv 1,100/100 2,100/100 3,200/200 Creation : CREATE TABLE test( numtst INT, chartst VARCHAR(8) ); \c - postgres COPY test FROM '/home/ou/file.csv' USING DELIMITERS ',' WITH NULL AS ''; \c - ou SELECT '+'||numtst||'+' AS "numtst", '*'||chartst||'*' AS "chartst" FROM test; Result : test_db=> SELECT '+'||numtst||'+' AS "numtst", '*'||chartst||'-' AS "chartst" FROM test; numtst | chartst --------+------------ -+2+ | *100/100 -+4+ | *100/100 -+5+ | *200/200 (3 rows) As you see the last '-' in the second column is appended to the first column. Any help would be kindy. Mathieu, PGP Public Key Fingerprint: D775 C0FC 039D 203E 3221 76F1 9BB4 43D2
"mathieu.chappuis@msg-software.com" <mathieu.chappuis@msg-software.com> writes: > test_db=> SELECT '+'||numtst||'+' AS "numtst", '*'||chartst||'-' AS "chartst" FROM test; > numtst | chartst > --------+------------ > -+2+ | *100/100 > -+4+ | *100/100 > -+5+ | *200/200 > (3 rows) > As you see the last '-' in the second column is appended to the first column. I think you have carriage returns in the values of chartst, which would not be surprising if the original data file had Windows-style newlines in it. COPY expects Unix-style newlines. regards, tom lane
On Fri, 24 May 2002 16:09:54 +0200, "mathieu.chappuis@msg-software.com" <mathieu.chappuis@msg-software.com> wrote: >Hello, > >A short example, is IMHO more explicit : > >% cat file.csv >1,100/100 >2,100/100 >3,200/200 I bet, your input lines end with <CR>/<LF> (carriage return/linefeed). On COPY FROM the <CR> is stored as the last character of chartst. >test_db=> SELECT '+'||numtst||'+' AS "numtst", '*'||chartst||'-' AS "chartst" FROM test; > numtst | chartst >--------+------------ >-+2+ | *100/100 Your terminal gets +2+ | *100/100<CR>- <CR> sends the cursor to the start of the line, so you see the - in front of the rest. Just to illustrate this, try SELECT '+'||numtst||'+' AS "numtst", '*'||chartst||'-abc-' AS "chartst" FROM test; and you will get numtst | chartst --------+------------ -abc- | *100/100 Servus Manfred