2012-01-06 117 views
1

我在我的Java應用程序中使用H2數據庫。我想將.csv文件加載到表中。我的.csv文件包含時間戳格式07/16/2011 02:43:43但H2 DB的默認時間戳格式爲2005-12-31 23:59:59H2數據庫 - CSVREAD - 從csv讀取時間戳到時間戳列

所以,當我使用CSVREAD加載該.csv文件到數據庫,我收到以下異常:

org.h2.jdbc.JdbcSQLException: Cannot parse "TIMESTAMP" constant "07/16/2011 02:43:43"; SQL statement: 
-- row #2 ('CIRCLE', 'MSISDN', 'PORT_IN_DATE', 'OPERATOR', 'PRODUCT_TYPE', 'PORT_ID') [22007-163] 
at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) 
at org.h2.message.DbException.get(DbException.java:158) 
at org.h2.value.ValueTimestamp.parse(ValueTimestamp.java:87) 
at org.h2.value.Value.convertTo(Value.java:819) 
at org.h2.table.Column.convert(Column.java:155) 
at org.h2.command.dml.Insert.addRow(Insert.java:153) 
at org.h2.command.dml.Select.queryFlat(Select.java:524) 

回答

1
select convert(parseDateTime(DOB,'yyyy/MM/dd hh:mm:ss'),timestamp) as NEWNAME 
from CSVREAD('file.csv') 

其中FILE.CSV有標記DOB

並插入到你的表中的列:

insert into YOURTABLE 
    (
    select convert(parseDateTime(DOB,'yyyy/MM/dd hh:mm:ss'), timestamp) 
    from CSVREAD('file.csv') 
    ) 
+0

+1您想查看與H2數據庫相關的另一個Q http://stackoverflow.com/questions/8761690/h2-database-csvread-skip-loading-header-line-of-the-csv-file -into-db – 2012-01-06 20:43:34

+0

以及另外一件事情。在'CSVWRITE'函數中,查詢用單引號引起來。那麼我怎麼寫這個where子句'start_timestamp>'2011-09-01 00:00:00.00',因爲它包含單引號。 – 2012-01-06 20:46:10

+0

不會逃脫工作?像start_timerstamp。 \'2011-09-01 00:00:00.00''? – 2012-01-06 21:10:07