2013-03-14 59 views
0

我傳遞了一個類型爲XML的參數作爲存儲過程參數成功。在處理來自XML的所有數據時,我沒有任何問題,但是我發現XML中的日期沒有正確檢索。例如,2013-03-14T15:14:53.598438+01:00現在爲2013-03-14 14:14:00。看來SQL正在計算+1來顯示時間。SQL Server 2005中相同時區的錯誤時間

我使用下面的T-SQL來獲得從XML

select 
    A.B.value('xs:dateTime((ConfirmationDate)[1])', 'smalldatetime') as ConfirmationDate 
FROM  
    @XML.nodes('/ArrayOfPreOrder/PreOrder/confirmationinfo/ConfirmationInfo') A(B)) as ConfirmationDate 

日期我怎樣才能解決這個問題?服務器和SQL Server都在同一時區。

+0

兩者是否具有相同的DST行爲? DST是否在兩臺服務器上正確設置? – 2013-03-14 14:29:06

+0

DST是一樣的 – mko 2013-03-14 15:02:56

+0

您是否確實檢查了服務器上的行爲和定義,或者您是否假設服務器已正確設置,因爲它們位於samae時區。過去幾年來,我遇到了驚人的DA,他們對如何在他們的機器上正確設置TZ沒有知識或瞭解。 – 2013-03-14 15:04:40

回答

1

檢查是否有您的時區設置,要導入的時區之間的區別...

SELECT SYSDATETIMEOFFSET() 

DECLARE @TimeZone NVARCHAR(255) 
EXEC master.dbo.xp_instance_regread 

N'HKEY_LOCAL_MACHINE', 
N'SYSTEM\CurrentControlSet\Control\TimeZoneInformation', 
N'TimeZoneKeyName', 
@TimeZone OUTPUT 

SELECT @TimeZone 

你指定你要導入所以我猜測它的XML時區將它轉換爲當地時間給你。因此,您從+1導入的時區應該是+2。

+0

我認爲SELECT SYSDATETIMEOFFSET()僅適用於sql 2008 – mko 2013-03-14 17:46:46

+0

啊,您安裝了SQL Server的操作系統是什麼? – 2013-03-14 18:04:24

+0

試試這個'選擇DateDiff(hh,GetUTCDate(),GetDate())'。 – 2013-03-14 18:09:55