Servicenow-链接服务器在Openquery中传递格式化的当前日期

问题描述 投票:0回答:2

我已经通过ODBC连接器将ServiceNow数据库作为链接服务器连接到MS SQL Server。我每天都通过手动输入日期来运行查询,现在我想使该过程自动化,因此我试图在where子句中传递CURRENT_DATE,但是在以以下格式传递日期时遇到问题(例如2020-04-02 00 :00:00),我使用DATE_FORMAT格式化日期,但会引发错误OLE DB provider "MSDASQL" for linked server "SERVICENOW" returned message "[SN][ODBC ServiceNow driver][OpenAccess SDK SQL Engine]Unsupported scalar function:DATE_FORMAT.[10149]

我每天运行的查询

SELECT * FROM OPENQUERY(SERVICENOW, 'Select 
closed_at,
number,
opened_at
FROM incident
WHERE opened_at BETWEEN ''2020-04-02 00:00:00'' AND ''2020-04-02 23:59:59'')  

自动查询引发错误

SELECT * FROM OPENQUERY(SERVICENOW, 'Select 
closed_at,
number,
opened_at
FROM incident
WHERE opened_at BETWEEN DATE_FORMAT(CURRENT_DATE, ''yyyy-MM-dd 00:00:00'') AND DATE_FORMAT(CURRENT_DATE, ''yyyy-MM-dd 23:59:59'');
sql-server servicenow openquery
2个回答
0
投票

DATE_FORMAT和CURRENT_DATE不是有效的SQL Server函数。试试这个。

SELECT * FROM OPENQUERY(SERVICENOW, 'Select 
closed_at,
number,
opened_at
FROM incident
WHERE CONVERT(DATE, opened_at) = CONVERT(DATE, GETDATE()')

使用CONVERT()函数转换为DATE数据类型将剥夺open_at和GETDATE()中的值的时间。


0
投票

我使用以下方法解决了这个问题,现在这是自动化的。强调的ServiceNow数据库是MySQL。

SELECT * FROM OPENQUERY(SERVICENOW, 'Select 
closed_at,
number,
opened_at
FROM incident
WHERE opened_at BETWEEN ''''' + FORMAT(CAST(FORMAT(GETDATE(), 'yyyy-MM-dd 00:00:00') as datetime), 'yyyy-MM-dd 00:00:00') + ''''' AND ''''' + FORMAT(CAST(FORMAT(GETDATE(), 'yyyy-MM-dd 23:59:59') as datetime), 'yyyy-MM-dd 23:59:59') + ''''' '')';
© www.soinside.com 2019 - 2024. All rights reserved.