【问题标题】:Oracle Linked Server in SQL Server 2012 - query with DATE column not workingSQL Server 2012 中的 Oracle 链接服务器 - 使用 DATE 列的查询不起作用
【发布时间】:2017-05-31 00:37:42
【问题描述】:

查询:

SELECT DISTINCT RCPCODE
FROM SMC..ICWGHC.C_JOBINFOHISTORY 
WHERE UPDATE_DATETIME >= '2017-01-14 13:08:49.0000000' 
  AND UPDATE_DATETIME <= '2017-01-16 13:08:49.0000000'

SELECT DISTINCT RCPCODE 
FROM SMC..ICWGHC.C_JOBINFOHISTORY 
WHERE COMPLETE_DATETIME BETWEEN '2017-01-16 06:52:38.0000000' 
                            AND '2017-01-16 12:52:38.0000000'
ORDER BY COMPLETE_DATETIME DESC

BETWEEN 和 ">=" 的两个查询都不适用于 Date 列中的条件。

如果我使用这个查询:

SELECT DISTINCT RCPCODE 
FROM SMC..ICWGHC.C_JOBINFOHISTORY

它确实返回数据。

我想用BETWEEN条件过滤数据来检索数据,这样我就可以用日期时间排序了。

【问题讨论】:

    标签: sql-server oracle11g sql-server-2012 sql-server-2008-r2 linked-server


    【解决方案1】:

    我在 SQL Server 中使用 Oracle 链接服务器时遇到了类似的情况。我没有使用过你的语法,因为我们通常使用OPENQUERY 来处理这类事情,所以我想我会尝试一下。

    隐式发生的字符串到日期转换存在某种问题。试试这个...

    SELECT DISTINCT RCPCODE 
    FROM SMC..ICWGHC.C_JOBINFOHISTORY 
    WHERE COMPLETE_DATETIME BETWEEN CONVERT(DATETIME, '2017-01-16 06:52:38', 121)
                                AND CONVERT(DATETIME, '2017-01-16 12:52:38', 121)
    ORDER BY COMPLETE_DATETIME DESC
    

    请注意,我从日期/时间字符串中删除了尾随零。他们给我添了麻烦。

    以下是使用 OPENQUERY 对 Oracle 进行直通查询的方法...

    SELECT * 
    FROM OPENQUERY(SMC, '
        SELECT DISTINCT RCPCODE 
        FROM ICWGHC.C_JOBINFOHISTORY 
        WHERE COMPLETE_DATETIME BETWEEN ''2017-01-16 06:52:38''
                    AND ''2017-01-16 12:52:38''
        ORDER BY COMPLETE_DATETIME DESC')
    

    我再次删除了尾随的零。

    这两种方法都适合你吗?

    诺埃尔

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      相关资源
      最近更新 更多