0

我有一个需要使用 CSVREAD 导入的 csv 文件。问题是它以不同的方式具有日期时间格式,因此需要对其进行解析。有人可以给我一个我应该如何做的例子吗?

我试过:合并到 MESSAGE (MESG_DATE_FROM,MESG_DATE_TO,MESG_DISPLAY_SEQ,MESG_TIME_DELAY,MESG_ID,REASONTYPE_MAJOR) SELECT * FROM CSVREAD('MESSAGE_0.csv');

此查询是以编程方式进行的,因此无法手工制作。问题是某些列是日期时间类型,并且与 H2 中的日期时间格式不同,在解析时我没有精确的方法来确定哪些列将是日期时间,所以我不能轻易放置 PARSEDATETIME 和 CSV 文件不包含任何列名或信息,仅包含值。像这样:2011-11-18 00.00.00.00,2030-12-31 00.00.00.00,1,20000,1,0, ...
...

将生成一个 Sql 文件以将此 CSV 加载到每个表,但似乎我需要知道列是否为 TIMESTAMP 类型才能将 PARSEDATETIME(MESG_DATE_FROM,'yyyy-mm-dd hh.mm.ss.uu') 添加为 MESG_DATE_FROM到 sql。

在 DB2 中,我们可以在合并查询中使用 timestampformat=YYYY-MM-DD HH.MM.SS.UU,所以这是以默认方式为表完成的。H2有类似的吗?

4

1 回答 1

2

我认为你想要的是不可能的。无法更改 H2 中的“全局”时间戳格式(就像您在 DB2 中所做的那样)。

我认为您将需要

  • 根据每列的列类型构造查询,PARSEDATETIME在适当的地方使用,或
  • 修改 CSV 文件以使用与 H2 使用相同的时间戳格式,这是JDBC 规范中定义的格式,在 SQL 转义序列下yyyy-mm-dd hh:mm:ss[.f...],或
  • 为 H2 提供补丁以支持“全局”时间戳格式。
于 2013-10-14T18:14:15.753 回答