首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为附加了美国东部夏令时/东部夏令时的时间修改了时间戳格式的DB2导入

为附加了美国东部夏令时/东部夏令时的时间修改了时间戳格式的DB2导入
EN

Stack Overflow用户
提问于 2015-12-01 20:25:24
回答 1查看 2.4K关注 0票数 0

我有一个带有下面提到的时间戳格式的文件import_file.csv

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Oct/21/2013 09:45:01 AM EDT
Dec/04/2013 04:41:01 PM EST

我在IBM DB2 v9.7中创建了一个表。

create table table_import_timestamp ( my_timestamp timestamp )

然后尝试导入该文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db2 import from import_file.csv of del messages msg.out insert into table_import_timestamp

我确实尝试了db2导入实用程序中提供的一些修改过的时间戳格式,但没有找到适合用文件中提到的格式导入时间戳的格式。

有没有办法在不修改文件的情况下,通过在import语句本身中指定时间戳格式,就可以将这种格式导入到表中?

EN

回答 1

Stack Overflow用户

发布于 2015-12-02 17:18:10

如果你愿意丢失时区信息,你有几个选择。

1.使用INGEST命令,该命令允许您在插入之前操作输入数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ingest from file YOURFILE format delimited ($ts char) restart off
  insert into YOURTABLE (TS_COLUMN) 
  values (
   timestamp_format(left(cast($ts as varchar(30)),23),'Mon/DD/YYYY HH:MI:SS AM')
  )

您甚至可以向表中添加额外的列来存储时区偏移值,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ingest from file YOURFILE format delimited ($ts char) restart off
  insert into YOURTABLE (TS_COLUMN,TZ_COLUMN) 
  values (
   timestamp_format(left(cast($ts as varchar(30)),23),'Mon/DD/YYYY HH:MI:SS AM'),
   case when right(cast($ts as varchar(30)),3) = 'EDT' then -4 else -5 end
  )

您需要安装10.1版的DB2客户端,因为INGEST在9.7客户端中不可用。它仍然可以在9.7服务器上工作。

2.放松你的“不想修改文件”的要求,使用像sedperl这样的东西来动态地重新格式化数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkfifo /tmp/mypipe
db2 "import from /tmp/mypipe of del 
modified by timestampformat=\"MMM/DD/YYYY HH:MM:SS TT\" 
insert into YOURTABLE (TS_COLUMN)" &
perl -npe 's/ E(D|S)T(,|$)//' YOURFILE > /tmp/mypipe
rm -f /tmp/mypipe

通过使用OS管道,您不需要修改原始文件,也不需要使用额外的磁盘空间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34029447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文