【问题标题】:How to treat a comma as text in output?如何将逗号视为输出中的文本?
【发布时间】:2011-12-02 17:54:12
【问题描述】:

有 1 列包含逗号。当我将查询输出到 csv 时,这些逗号会破坏 csv 格式。我一直在做的事情是避免这种情况很简单 replace(A."销售代表",',','')

有没有更好的方法可以让我在不破坏 csv 文件的情况下真正获得最终输出中的逗号?

谢谢!

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    您可以使用COPY command 让 PostgreSQL 为您构建 CSV:

    COPY -- 在文件和表之间复制数据

    类似于以下之一:

    copy your_table to 'filename' csv
    copy your_table to 'filename' csv force quote *
    copy your_table to stdout csv force quote *
    copy your_table to stdout csv force quote * header
    ...
    

    您必须是超级用户才能复制到文件名。如果您在psql 内部,则可以使用\copy command

    执行前端(客户端)复制。这是一个运行 SQL COPY 命令的操作,但不是服务器读取或写入指定的文件,而是 psql 读取或写入文件并在服务器和本地文件系统之间路由数据。

    语法几乎相同:

    \copy your_table to 'filename.csv' csv force quote * header
    ...
    

    【讨论】:

      【解决方案2】:

      "引用字段

      a,this has a , in it,b
      

      会变成

      a,"this has a, in it",b
      

      如果字段同时具有,",则将引号加倍:

      a,this has a " and , in it,b
      

      变成

      a,"this has a "" and , in it",b
      

      【讨论】:

      • +1。完全正确,然后确保导入这些 csv 文件的任何进程都知道如何正确读取它们。
      • 谢谢,但如果查询类似于从 Table1 中选择“销售代表”,我该如何引用字段?
      • 不确定 postgres 是如何做到的。 mysql 确实有一个“select into outfile”选项,可让您指定 csv 格式/转义选项。如果不出意外,您可以在查询中使用字符串替换和连接引用所有内容。 select '"' || fieldname || '"' etc...
      • 您想查看“COPY”命令的文档。可以选择输出带有标题的 CSV 格式(或不输出)并复制整个表或查询结果。注意 - “COPY”在服务器端执行,路径和权限需要从该点查看 - 有一个 psql 版本“\copy”在客户端运行。
      猜你喜欢
      • 2016-11-29
      • 2023-04-11
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多