使用 Talend 将 yyyyMMdd 字符串插入日期列
Insert yyyyMMdd string into date column using Talend
我有以下情况:
具有 table 的 PostgreSQL 数据库,其中包含名为 date 的日期类型列。
来自带分隔符的 .txt 文件输出的字符串:20170101.
我想将字符串插入到日期类型的列中。
到目前为止,我已经尝试了以下混合 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 的屏幕截图
编辑//这似乎不是日期格式问题,而是 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,
输出结果如下:
我有以下情况:
具有 table 的 PostgreSQL 数据库,其中包含名为 date 的日期类型列。
来自带分隔符的 .txt 文件输出的字符串:20170101.
我想将字符串插入到日期类型的列中。
到目前为止,我已经尝试了以下混合 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 的屏幕截图
编辑//这似乎不是日期格式问题,而是 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,
输出结果如下: