如何从列中删除多余的字符?

Posted

技术标签:

【中文标题】如何从列中删除多余的字符?【英文标题】:How can I remove extra characters from a column? 【发布时间】:2014-04-16 16:35:38 【问题描述】:

我有一张桌子,上面有客户/电话/城市/州/邮编/等等。 有时,我会从 .csv 文件中导入信息,有时邮政编码的格式如下:xxxxx-xxxx,我只需要它是一个通用的 5 位数邮政编码。

我怎样才能删除最后 5 个字符,而不必从 Excel 中逐个单元格地删除(这就是我现在正在做的)?

谢谢

编辑:这是我在克雷格的建议后使用的,它奏效了。但是,一些 zip 条目是加拿大邮政编码,并且通常格式为 x1x-x2x。运行它会删除字段中的最后一个字符。

我该如何补救?

【问题讨论】:

【参考方案1】:

您需要执行以下 3 个想法之一:

在插入期间使用 ETL 工具过滤数据; 将COPY 转换为TEMPORARYUNLOGGED 表,然后执行INSERT INTO real_table SELECT ...,通过合适的substring(...) 调用转换数据;或 编写一个简单的 Perl/Python/whatever 脚本来读取 csv,根据需要对其进行转换,然后将结果插入 PostgreSQL。我会将 Python 与 csv 模块和 psycopg2 的 copy_from 一起使用。

这样的insert into ... select 可能看起来像:

INSERT INTO real_table(col1, col2, zip)
SELECT
  col1,
  col2,
  substring(zip from 1 for 5)
FROM temp_table;

【讨论】:

克雷格的名单很棒。我最喜欢选项2。 (实际上,在许多情况下,我最喜欢选项 1,但有一个巨大的警告是,许多 ETL 工具都很昂贵,而且都有陡峭的学习曲线。) @mdahlman 了解 Talend Studio、CloverETL、Pentaho Kettle。 我的意思是,与 substr(zip,1,5) 相比,如果完全满足要求,学习 Talend 是一条非常陡峭的学习曲线。但这些工具无疑提供了许多额外的功能。 @mdahlman 哦,完全同意。这就是为什么我通常只使用 python 脚本。 你能给我一个关于选项 2 的例子吗?我已经使用了一个临时表,我将 .csv 文件中的数据复制到其中,然后插入到真实的表中。

以上是关于如何从列中删除多余的字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何从列中删除日期和月份(类型:datetime64)[重复]

使用 SSIS 从列中删除特殊字符 " 和 '

SQL 从列中删除字符

从列中删除字符串组合

如何从列类型列表中删除 pandas DataFrame 中的空值

从列中删除逗号,空格和“NULL”字符串为0(零)