【问题标题】:Oracle to_char conversion causing hour offset?Oracle to_char 转换导致小时偏移?
【发布时间】:2012-11-05 16:28:24
【问题描述】:

我想让那些比我更了解 PL/SQL 和 T-SQL 的人来讨论这个问题。下面是我继承的一些代码,它返回的日期是 1 小时。当我在远程查询的选择语句中删除“to_char(i.UPDATE_DT,''YYYY-MM-DD HH24:MI:SS.FF3'')”时,小时偏移量消失了。我担心此更改可能会产生其他影响,所以我的问题是为什么有人会通过 OpenQuery 将 Oracle 时间转换为字符串,然后在 select 语句中使用 T-SQL 转换?我在这里遗漏了什么,为什么 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

【问题讨论】:

    标签: tsql plsql


    【解决方案1】:

    简单的答案但是;一台服务器与另一台服务器之间的夏令时问题?

    【讨论】:

    • 这是我想到的第一件事……但奇怪的是,删除 to_char 函数也会删除偏移量,这似乎与夏令时无关,但我还不确定。
    • 好吧,to_char 正在提交到 oracle 服务器进行处理,因此它将取决于该时间设置。 tsql 转换将由 sql server 完成,它必须将其给出的字符串解释为日期时间,然后才能将其转换为自己的目的。 SQL 在解释字符串时有机会获得错误的时区。尝试让 oracle 也输出字符串的区域部分
    • 好的,我应该补充一点,当我在Oracle开发人员中单独运行远程查询时也会发生此问题,因此单独删除Oracle端的to_char也会产生偏移量,这更奇怪.但是 SQL 和 Oracle 之间的时区确实匹配。
    猜你喜欢
    • 2013-01-21
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2018-07-18
    相关资源
    最近更新 更多