【问题标题】:WHERE clause in OPEN QUERYOPEN QUERY 中的 WHERE 子句
【发布时间】:2019-05-28 08:51:32
【问题描述】:

我在 SQL Server 2012 中创建了一个过程,目的是从 Oracle 表中获取昨天的数据并将其插入到 SQL Server 表中 像这样使用 OPENQUERY:

IF OBJECT_ID('tempdb..#Temp') IS NOT NULL
     DROP TABLE #Temp 

SELECT   
    LEAD(CONVERT(VARCHAR, CONVERT(DATETIME, '01-JAN-1970 03:00:00', 120) + [DAT_CLOSEDATE] / (24 * 60 * 60), 120), 1, CONVERT(VARCHAR, CONVERT(DATETIME, '01-JAN-1970 03:00:00', 120) + [DAT_CLOSEDATE] / (24 * 60 * 60), 120)) OVER (PARTITION BY [TXT_TICKETNUMBER] ORDER BY [DAT_CLOSEDATE]) AS [CLOSE_DATE]
INTO 
    #Temp
FROM
    OPENQUERY(ORACLE_DB, 'SELECT DAT_CLOSEDATE, TXT_TICKETNUMBER FROM SCHEME.TABLE')
WHERE       
    [DAT_CLOSEDATE] = DATEADD(d, -1, GETDATE()) 

一切都按预期工作,但 SQL Server 语法中的问题在 WHERE 子句中,所以我想在 OPENQUERY 中考虑以下问题:

  1. DAT_CLOSEDATE 必须动态获取昨天的数据(today-1)

  2. Oracle 中的DAT_CLOSEDATE 列数据类型是FLOAT 和SQL Server 中的DATETIME

我希望OPENQUERY 语法类似于以下内容:

OPENQUERY(ORACLE_DB, 'SELECT DAT_CLOSEDATE, TXT_TICKETNUMBER   
                      FROM SCHEME.TABLE 
                      WHERE [DAT_CLOSEDATE] = DATEADD(d, -1, GETDATE())')

【问题讨论】:

  • 您应该在此处添加一些示例数据,以使您的要求更清晰。
  • “Oracle 中的 DAT_CLOSEDATE 列数据类型为 FLOAT”是什么意思?如何使用float 存储日期/时间?当然,数据模型在 Oracle 中应该是固定的,但对您的问题来说更重要的是数据实际上是什么样的。
  • 我搜索太多,无法加入 OpenQuery 中的 where 子句,这真的很有帮助,

标签: sql sql-server oracle oracle11g


【解决方案1】:

如果在 Oracle 上寻找等价物,那么:

where DAT_CLOSEDATE = sysdate-1

where DAT_CLOSEDATE = trunc(sysdate)-1

第二个版本将时间设置为 00:00:00

【讨论】:

  • DAT_CLOSEDATE 列数据类型为浮点数
  • 那么为什么不在问题中包含它呢?你知道那一栏是如何转换成日期的吗?
【解决方案2】:

假设 DAT_CLOSEDATE 列具有浮点类型值,例如 2018123120253420181231202713 ... 也就是说,它们是类型 yyyymmddhh24miss 从日期值转换而来,其中yyyy 代表yearmm 代表月份,dd 代表日,hh24 代表00-23 范围内的小时, mi 表示分钟,ss 表示秒。

在这种情况下,the following 块可能会被调用:

OPENQUERY(ORACLE_DB, 'SELECT DAT_CLOSEDATE, TXT_TICKETNUMBER   
                        FROM SCHEMA.MYTABLE 
                       WHERE substr(DAT_CLOSEDATE,1,8) = to_char(sysdate-1,''yyyymmdd'')')

获取前一天的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2020-07-26
    • 2022-01-19
    • 2015-09-20
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    相关资源
    最近更新 更多