【发布时间】: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 中考虑以下问题:
DAT_CLOSEDATE必须动态获取昨天的数据(today-1)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