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

Insert yyyyMMdd string into date column using Talend

我有以下情况:

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

到目前为止,我已经尝试了以下混合 results/errors:


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 Error: 42601: ERROR: Syntax error at "00" position 194"


其他observations/attempts:

有趣的是,如果我在查询中使用“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)

编辑// 我的工作和 tMap 的屏幕截图

http://imgur.com/a/kSFd0

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

编辑// 修正:当然,这是一个愚蠢的简单 problem/solution。数据库名称和模式名称字段为空...所以它基本上不知道连接到哪里

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

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

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

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

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

已修复:这是一个愚蠢的简单 problem/solution 当然。数据库名称和模式名称字段是空的......所以它基本上不知道在哪里连接这就是为什么我得到 BATCH 0 错误并且当我在调试时更深入时我发现它找不到 table,说明关系不存在。

这样试试,

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

然后像这样设置 tMap,

输出结果如下: