2012-11-05 63 views
0

我想通過那些比我更瞭解PL/SQL和T-SQL的人來運行這個問題。下面是我繼承的一些代碼,它的返回日期是1個小時。當在遠程查詢的select語句中刪除「to_char(i.UPDATE_DT,'YYYY-MM-DD HH24:MI:SS.FF3'')」時,小時偏移量將消失。我擔心這種改變可能會產生的其他影響,所以我的問題是爲什麼有人通過OpenQuery將Oracle時間轉換爲字符串,然後在select語句中使用T-SQL轉換?我在這裏錯過了什麼,爲什麼to_char會導致偏移量(如果是這個原因)?Oracle to_char轉換引起小時偏移?

SELECT 
    CSE_ID       AS ID, 
    OTHR_CSE_ID     AS Case_Num, 
    convert(datetime,UPDATE_DT,121) AS Export_Time 
FROM 
    OpenQuery(OracleTbl, ' 
    SELECT c.CSE_ID, r.OTHR_CSE_ID, to_char(i.UPDATE_DT,''YYYY-MM-DD HH24:MI:SS.FF3'') UPDATE_DT 
    FROM AE_CSES c 
    INNER JOIN CSES i ON i.CASE_ID = c.CSE_ID AND i.ACTION_CD = ''INS'' 
    INNER JOIN OTH_CSE_REFS r ON r.CSE_ID = c.CSE_ID AND r.OTH_CS_REF_SEQ_NBR = 1 AND r.OTHER_SOURCE_TYPE = ''SIE'' 
    ') AS i 

回答

0

簡單的答案,但;一臺服務器和另一臺服務器之間的夏令時問題?

+0

這是我認爲的第一件事...但奇怪的是,刪除to_char函數也會刪除偏移量,這似乎與夏令時無關,但我還不確定。 – ewomack

+0

好了,to_char被提交給oracle服務器進行處理,所以它將依賴於該時間設置。 tsql轉換將由sql server完成,sql server必須將其作爲日期時間給出的字符串解釋,然後才能將其轉換爲自己的用途。 Theres有機會讓SQL在解釋字符串時得到錯誤的時區。嘗試獲得oracle以輸出字符串的區域部分 – PaulMolloy

+0

好吧,我應該補充說,當我在Oracle開發人員中自行運行遠程查詢時也會發生此問題,因此單獨在Oracle側刪除to_char也會生成偏移量,這更奇怪。但是SQL和Oracle之間的時區確實匹配。 – ewomack