我有一个带有下面提到的时间戳格式的文件import_file.csv
。
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 )
然后尝试导入该文件。
db2 import from import_file.csv of del messages msg.out insert into table_import_timestamp
我确实尝试了db2导入实用程序中提供的一些修改过的时间戳格式,但没有找到适合用文件中提到的格式导入时间戳的格式。
有没有办法在不修改文件的情况下,通过在import语句本身中指定时间戳格式,就可以将这种格式导入到表中?
发布于 2015-12-02 17:18:10
如果你愿意丢失时区信息,你有几个选择。
1.使用INGEST
命令,该命令允许您在插入之前操作输入数据:
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')
)
您甚至可以向表中添加额外的列来存储时区偏移值,例如
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.放松你的“不想修改文件”的要求,使用像sed
或perl
这样的东西来动态地重新格式化数据。
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管道,您不需要修改原始文件,也不需要使用额外的磁盘空间。
https://stackoverflow.com/questions/34029447
复制相似问题