我有以下情况:
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的截图
编辑//它似乎不是日期格式化问题,而是Talend到PostgreSQL连接问题
修改// 固定:这是一个愚蠢的简单问题/解决方案。数据库名称和模式名称字段为空...所以它基本上不知道连接的位置
答案 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)