使用Talend将yyyyMMdd字符串插入日期列

时间:2017-04-13 08:47:30

标签: postgresql date talend

我有以下情况:

  • PostgreSQL数据库,其中包含一个名为date的日期类型列的表。

  • 输出分隔的.txt文件中的字符串:20170101。

我想将字符串插入日期类型列。

到目前为止,我已经尝试了以下混合结果/错误:

row1.YYYYMMDD 
Detail Message: Type mismatch: cannot convert from String to Date

解释:这个很明显。

TalendDate.parseDate("yyyyMMdd",row1.YYYYMMDD) 
Batch entry 0 INSERT INTO "data" ("location_id","date","avg_winddirection","avg_windspeed","avg_temperature","min_temperature","max_temperature","total_hours_sun","avg_precipitation") VALUES (209,2017-01-01 00:00:00.000000 +01:00:00,207,7.7,NULL,NULL,NULL,NULL,NULL) was aborted.  Call getNextException to see the cause.

可以看到解析为" 2017-01-01 00:00:00.000000 +01:00:00" 的字符串。

当我尝试直接执行查询时,我得到一个" SQL错误:42601:错误:语法错误在" 00"第194和34号;

其他观察/尝试:

有趣的是,如果我使用' 20170101'作为查询中的字符串,请参见下文。

INSERT INTO "data" ("location_id","date","avg_winddirection","avg_windspeed","avg_temperature","min_temperature","max_temperature","total_hours_sun","avg_precipitation") VALUES (209,'20170101',207,7.7,NULL,NULL,NULL,NULL,NULL)

我还尝试将数据库日期列的架构更改为字符串。它产生以下结果:

Batch entry 0 INSERT INTO "data" ("location_id","date","avg_winddirection","avg_windspeed","avg_temperature","min_temperature","max_temperature","total_hours_sun","avg_precipitation") VALUES (209,20170101,207,7.7,NULL,NULL,NULL,NULL,NULL) was aborted.  Call getNextException to see the cause.

此查询也无法直接生效,因为日期不在单引号之间。

我缺少或不做什么? (我已经开始学习2-3天前使用Talend)

EDIT // 我的Job和tMap的截图

http://imgur.com/a/kSFd0

编辑//它似乎不是日期格式化问题,而是Talend到PostgreSQL连接问题

修改// 固定:这是一个愚蠢的简单问题/解决方案。数据库名称和模式名称字段为空...所以它基本上不知道连接的位置

4 个答案:

答案 0 :(得分:2)

您无需执行任何操作即可将20170101之类的字符串插入日期列。 PostgreSQL将为您处理它,它只是ISO 8601的日期格式。

CREATE TABLE foo ( x date );
INSERT INTO foo (x) VALUES ( '20170101' );

如果有的话,这只是一个问题。

答案 1 :(得分:0)

  

[..](209, 2017-01-01 00:00:00.000000 +01:00:00 ,207,7.7,NULL,NULL,NULL,NULL,NULL)[。 ]

如果Talend自己不知道将时间戳传递给查询需要单引号,那么如果可能的话 - 你需要这样做。

答案 2 :(得分:0)

固定:这是一个愚蠢的简单问题/解决方案。数据库名称和模式名称字段是空的...所以它基本上不知道在哪里连接那就是为什么我得到BATCH 0错误,当我深入调试时我发现它无法找到表,说明关系不存在。 / p>

答案 3 :(得分:0)

试试这个,

enter image description here

输入文件中的数据为:20170101(字符串格式)

然后将tMap设置为, enter image description here

输出如下:

enter image description here