我有一个有 30 列的表。我已经执行了以下查询(使用 postgres 9.1,通过 pgAdmin 执行)
select column2 || '|' || column3 || '|' || column4
from tablename
order by column1 asc
我得到 5 行结果为空。我注意到在我执行 select * from table name 时 column3 的值为 'Data1|Data2'。
任何想法?
表结构简单。除了第 1 列(数字)和具有除第 3 列之外的简单文本的数据之外,所有字符都是不同的。Column3 的数据带有分隔符 ("|)。即 12345|23333
我怎样才能做到这一点?
psql -d mydb-U user1 -c "\copy tablename to
'/home/user/table_data.csv' delimiter '|' csv header";
如果任何列是
null
连接的结果,则使用||
也为空。您可以使用
concat()
or 甚至concat_ws()
("concat With S eparator " ) 使 Postgres 将空值视为空字符串:请注意,
concat_ws()
如果值“缺失”,则不会附加分隔符。如果你确实需要它,你必须使用concat()
手册中的详细信息:
9.4。字符串函数和运算符
关于问题的最后一部分,您可以对命令使用
select
语句。\copy
有关详细信息,请参阅手册。关于您问题的第二部分,以及您对a_horse_with_no_name答案的评论,请尝试:
(为可读性添加了换行符)
如果这不起作用,请执行以下操作:
输出看起来像你想要的吗?如果是这样,请再做一次,但使用 i/o 重定向:
...假设 /path/test/ 作为路径存在。
另外,你打算做这样的事情吗?