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

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

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

谢谢

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

我该如何补救?

【问题讨论】:

    标签: postgresql csv openoffice.org


    【解决方案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 文件中的数据复制到其中,然后插入到真实的表中。
    猜你喜欢
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 2022-12-18
    相关资源
    最近更新 更多