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

标签 postgresql csv openoffice.org

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

如何删除最后 5 个字符,而不必从 Excel 中逐个单元格地删除(我现在正在这样做)?

谢谢

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

我该如何补救?

最佳答案

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

  • 在插入过程中使用 ETL 工具过滤数据;
  • COPYTEMPORARYUNLOGGED 表中,然后执行 INSERT INTO real_table SELECT ... 转换使用合适的 substring(...) 调用的数据;或
  • 编写一个简单的 Perl/Python/任何脚本来读取 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;

关于postgresql - 如何从列中删除多余的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23115210/

相关文章:

csv - 通过打印每列中出现的前 5 个数据元素来增强 awk 脚本

r - 将csv文件导入R

ruby-on-rails - 缺少 Postgres 列

postgresql - 在 Slick 表定义中使用数据库函数 - 如何?

postgresql - 使用 Heroku CLI、Postgres 时出现 SQL 语法错误

java - 在 ODFToolkit 中将内容添加到 OpenOffice odp 演示文稿的框架

java - IKVM.NET 作为 OpenOffice 的 JRE

postgresql - 为什么gorm postgresql在“)”处或附近抛出pq:语法错误?

python - 通过使用标题作为列名加载 csv 文件来创建数据库(并添加以文件名作为名称的列)

ruby - ruby 中有什么好的 OpenDocument 库吗?