2013-02-27 27 views
1

我正在嘗試將我的數據從sybase遷移到monetdb(或相反),因此我使用bcp從sybase中將其複製到monetdb中。批量複製[複製到]如何在monet db/sybase中替換或更改一列(批量複製期間)的數據類型?

問題是某些數據類型在monetdb中不可用,例如datatime。爲了解決這個問題,我可以在monetdb中定義一個將datetime格式轉換爲monetdb特定格式的函數。

但如何調用特定列此功能時,我試圖bulkcopy命令

COPY INTO TABLE from file using delimiters;

相同的情況爲BCP在Sybase

編輯2: (我想我解決我的問題儘管原始問題仍然存在),我想在monetdb和sybase中從csv文件批量複製數據。 csv文件有一列包含unix時間戳(從1970年開始)。由於使用unix時間戳與人類可讀的日期時間(YYYY-MM-DD HH:MM:SS)格式相比很難查詢,所以我想將該時間戳列轉換爲日期時間格式)。

我無法在批量複製時更改數據類型,但已定義(使用)函數將時間戳轉換爲可讀格式。

 
--For Sybase used dateadd function : 
select * from gaurav.table where dateadd(ss,t_stamp,'1/1/1970') '2013-02-27 (less than sign) 10:17:29.463114'; 
 
--For Monetdb defined a function : 
create function "epoch"(sec INT) returns TIMESTAMP external name timestamp."epoch"; 
select * from gaurav.table where epoch(t_stamp) (less than sign) '2013-02-27 10:17:29.463114'; 

回答

1

我不知道AB出來monetdb,但Sybase ASE的範圍內,你可以定義視圖爲您表的日期時間的Sybase轉換成你需要的格式。一旦創建了視圖,您可以直接從視圖中刪除BCP,並且您的數據應該已準備好導入。

您可能可以將BCP轉換爲表格視圖並完成相同的操作。

視圖的更多信息,可以在Sybase的Transact-SQL User's Guide

+0

謝謝你的答案被發現,我與Unix時間戳txt的表,我裝它與BCP SYBASE,然後能夠查詢與人類可讀的日期數據與選擇* from gaurav.table where dateadd(ss,t_stamp,'1/1/1970')<'2013-02-27 10:17:29.463114'....但我可以只將unix時間戳轉換爲日期時間格式在bcp – Gaurav 2013-02-28 06:24:32

+1

期間,bcp不允許任何數據更改,但您可能能夠將BCP轉換爲表格視圖,並以此方式轉換數據。 – 2013-02-28 15:49:03

+0

是的,所以我可以使用Linux工具(如sed或awk)從csv文件更改原始數據,以在bcp之前更改數據或使用自定義視圖。 – Gaurav 2013-02-28 17:57:42