带有两个 NULL 字符串的 PostgreSQL COPY CSV

Posted

技术标签:

【中文标题】带有两个 NULL 字符串的 PostgreSQL COPY CSV【英文标题】:PostgreSQL COPY CSV with two NULL strings 【发布时间】:2015-05-22 23:30:40 【问题描述】:

我有一个来自 Web 查询的 csv 文件源,其中包含一个字符串的两个变体,当复制到 PostgreSQL 表时,我想将其归类为 NULL。

例如

COPY my_table FROM STDIN WITH CSV DELIMITER AS ',' NULL AS ('N/A', 'Not applicable'); 

我知道这个查询会引发错误,所以我正在寻找一种方法来在 COPY CSV 查询中指定两个单独的 NULL 字符串?

【问题讨论】:

【参考方案1】:

我认为在这种情况下你最好的选择是,因为COPY 不支持多个NULL 字符串,所以将NULL 字符串参数设置为其中一个,然后,一旦全部加载,执行@ 987654324@ 将在任何列中设置值,您希望将另一个 NULL 字符串设置为实际的 NULL 值(确切的查询取决于哪些列可以具有这些值)。

如果你有一堆列,你可以在你的SET 子句中使用CASE 语句来返回NULL,如果它匹配你的特殊字符串,否则返回值。 NULLIF 也可以使用(这样会更紧凑)。例如NULLIF(col1, 'Not applicable')

【讨论】:

NULLIF 也可以使用(这样会更紧凑)。例如NULLIF(col1, 'Not applicable') - 这是一个很好的干净方式。非常感谢。

以上是关于带有两个 NULL 字符串的 PostgreSQL COPY CSV的主要内容,如果未能解决你的问题,请参考以下文章

在 PostgreSQL 列中搜索子字符串

postgresql的copy命令如何将csv中的引号转换成null插入?

将带有单引号的字符串从 Java 插入 Postgresql

PostgreSQL - 我有啥办法可以定义一个在插入或更新时将空字符串转换为 null 的列?

插入带有字符串的数组时,postgresql 查询会出错

postgreSQL计算总数sum if case when