2010-05-26 116 views
0

你好我正在做一些從PostgreSQL到Microsoft SQL Server的數據轉換。到目前爲止,它一切順利,我幾乎已經運行了整個數據庫轉儲腳本。只有一件事現在搞砸了:日期。幫助將PostgreSQL日期轉換爲SQL Server日期

日期被轉儲爲字符串格式。這是兩個例子格式到目前爲止,我已經看到了:'2008-01-14 12:00:00'和更精確的'2010-04-09 12:23:45.26525'

我想一個正則表達式(或一組regexs的),我可以運行,這樣將與SQL Server兼容的日期更換這些。任何人都知道我該怎麼做?

回答

1

第一個與datetime兼容,但第二個太精確。它將適合在sqldatetime2,這是可以從SQL Server 2008:

select cast('2008-01-14 12:00:00' as datetime) 
,  cast('2010-04-09 12:23:45.26525' as datetime2) 

對於早期版本,您可以使用substring砍掉了不可存儲精度:

select cast(substring('2010-04-09 12:23:45.26525',1,23) as datetime) 

對於一個正則表達式,以消除任何附加數字(用perl正則表達式語法):

(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3})\d* 

並與替換:

$1 

這與括號內的()之間的正則表達式部分匹配。

+0

雖然將我們的datetime列更改爲sqldatetime2並不是一個選項。我們不需要額外的精度,只是時間戳是PostgreSQL中唯一的datetime-ish格式。 – Earlz 2010-05-26 20:20:34

+0

@Earlz:如果您不需要額外的精度,可以使用'substring'來刪除它。 SQL Server可以識別微秒的HH:mm:ss.fff格式 – Andomar 2010-05-26 20:24:37

+0

是的,但是您的解決方案並不完整。我正在處理一個數千行文件。什麼是匹配這個日期的正則表達式,所以我可以用'cast(substring ...'bit?'替換它? – Earlz 2010-05-26 20:35:16