2016-12-06 105 views
0

我想动态地在SQL Server的openquery中传递一个日期函数。我的SQL Server连接到OleDB Oracle数据库。在openquery中的日期函数的语法是什么 - OleDB到SQL Server

当我运行使用基于Oracle的日期函数我的查询,我的查询运行,但没有返回数据:当我使用基于SQL Server日期函数我收到以下错误消息,运行查询

SELECT * 
FROM OPENQUERY([SMA], 'SELECT B.SQL_DATE 
         FROM DIM_DATE B 
         WHERE B.SQL_DATE = current_DATE'); 

SELECT * 
FROM OPENQUERY([SMA], 'SELECT B.SQL_DATE 
         FROM DIM_DATE B 
         WHERE B.SQL_DATE = ''GETDATE()'''); 

OLE DB提供程序 “OraOLEDB.Oracle” 链接服务器 “SMA” 返回消息 “ORA-01841:(全)年份必须-4713和+9999之间,而不是为0”。

我想我应该使用基于SQL Server的语法(而不是Oracle语法),但不知道current_DATE语句如何能够运行?

任何帮助将不胜感激!

+0

'GETDATE()'正在被SQL Server解析器的日期表示所取代,因为评估不在字符串中,而current_DATE正在通过线路发送到连接的服务器并在那里被解析为sql。检查您的语言环境并确保日期值对齐。你可以强制一个特定的日期值,这听起来就是你需要在这里做的。 –

+0

所以问题的一部分是我引用的日期字段是时间戳。如果我正在查询打开的查询之外的数据库,则可以使其工作:SELECT B.SQL_DATE FROM [SMA] .. [SMA]。[DIM_DATE] B WHERE B.SQL_DATE = Convert(date,GETDATE ()); 但是,我不明白找出需要使用哪些滴答,或者甚至可以通过openquery传递该函数。 –

回答

2

您使用目标数据库支持的语法,因此在这种情况下使用Oracle语法。

GetDate()相当于SYSDATE。这包含一个时间,因此您可以通过指定TRUNC(SYSDATE)来删除时间。对于日期文字,你需要指定一个TO_DATE()函数,例如。 TO_DATE('31 -DEC-2016','DD-MON-YYYY')

由于日期文字必须是双单引号,即TO_DATE(''31-DEC-2016' ')'DD-MON-YYYY')

+0

BOOM!你是最棒的!那就是诀窍。它也帮助我从哲学上理解如何通过开放查询更好地理解要使用的功能。当我得到一分钟时,我欠堆栈溢出一些问题的答案! –

+0

@BobbyJobsite - 你也可以[接受](http://meta.stackexchange.com/a/5235/238021)这个答案。 –

相关问题