从.rpt文件中提取数据到PostgreSQL 9.0中的数据库中复制

时间:2014-07-02 04:40:51

标签: c# sql postgresql pgadmin

我有一个报告文件(.rpt),其文本如下所示,此.rpt文件每天都会更新。

Datum/Uhrzeit,Sta.,Bez.,Unit,TBId,Batch,OrderNr,Mat1,Total1,Mat2,Total2,Mat3,Total3,Mat4,Total4,Mat5,Total5,Mat6,Total6,Summe
41521.755934(04.09.13 18:08:32),TB01,TB01,005,300,9663,        ,2,27313.63,0,0.00,0,0.00,3,1776.19,0,0.00,0,0.00,29089.82
41521.797601(04.09.13 19:08:32),TB01,TB01,005,300,9682,        ,2,27365.98,0,0.00,0,0.00,3,1780.86,0,0.00,0,0.00,29146.85
41521.839269(04.09.13 20:08:32),TB01,TB01,005,300,9701,        ,2,27418.34,0,0.00,0,0.00,3,1785.53,0,0.00,0,0.00,29203.88
41521.880937(04.09.13 21:08:33),TB01,TB01,005,300,9721,        ,2,27473.31,0,0.00,0,0.00,3,1790.40,0,0.00,0,0.00,29263.71
41521.922606(04.09.13 22:08:33),TB01,TB01,005,300,9741,        ,2,27528.53,0,0.00,0,0.00,3,1795.30,0,0.00,0,0.00,29323.83
41521.964274(04.09.13 23:08:33),TB01,TB01,005,300,9760,        ,2,27580.88,0,0.00,0,0.00,3,1799.97,0,0.00,0,0.00,29380.84
41522.005942(05.09.13 00:08:33),TB01,TB01,005,300,9780,        ,2,27636.00,0,0.00,0,0.00,3,1804.86,0,0.00,0,0.00,29440.86

需要提取每行的第一个和最后一个读取值,并且需要将该读数放在数据库表中。

首读 - Datum / Uhrzeit

上次阅读 - Summe

我也使用了COPY命令,但它没有取第一个值。我想知道用哪个数据类型来提取这个值(它不是正常的日期格式)???

也是不可能只从这个文件中取出这两个读数而不是整个20个读数?有没有这样的方法?

我正在使用PostgreSQL 9.0

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

假设"阅读" ="列":

您需要COPYTEMPORARY表,其中第一列的类型为text,而不是date,因为这是无效的日期格式。

然后你可以使用INSERT INTO teal_table (col1, col2, ...) SELECT some_func(thedate), col2, col3... FROM temptable使用适当的SQL将临时表内容转换为正确的日期数据,并将其插入到真实的目标表中。

Stack Overflow上有很多现有的例子,但不适用于您的特定日期格式。我猜测parens (...)中的日期是您想要的日期,之前的数字是该日期的表示,即自纪元以来的天数+自一天开始以来的时间。它可以更容易地解析日期部分,您可以使用:

SELECT to_timestamp(substring('41521.880937(04.09.13 21:08:33)' from '\(.*\)' ), '(DD.MM.YY HH24.MI.SS)');

以便为您提供上述some_func

至于只选择两个所需的列I already explained that to you before,所以我不会重复自己。简短版本:使用ETL工具,仅使用这些列重新导出CSV,或使用过滤程序限制输入。