如何从列中删除多余的字符?
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
转换为TEMPORARY
或UNLOGGED
表,然后执行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)[重复]