1

我通过 OpenQuery() 从 MS SQL Server 2014 连接到 (ServiceNow) MySQL 数据库。我想过滤掉超过 24 小时的记录。当我设置一个静态日期时,它会返回我希望看到的数千行。但是,当我尝试使用计算字段时,它会运行但返回零记录。

select number, sys_updated_on 
from OPENQUERY(ServiceNowUAT, 
'Select number, sys_updated_on
FROM DATABASE.[SCHEMA].[TableName]
WHERE sys_updated_on  > DATEADD(d, -2, NOW()) ')

我还使用了该DATE_SUB()函数以及各种其他形式的语法。我尝试将计算的日期转换为日期、日期时间、时间戳、varchar 等。我也在 MS Query 和 SSIS 中尝试过。sys_updated_on > DATEADD(d, -2, NOW())一旦我添加了“ ”段,所有的查询都无法返回结果,以及其他类似的查询。

如果我将 sys_update_on 字段转换为时间戳,它可以工作,但会将处理时间从大约 10 秒增加到 30 多分钟,这当然并不理想(表中有几百万行

sys_update_on字段的格式为“ 2015-02-10 10:24:17.000000”。

另一个相关部分是我使用 ServiceNow 提供的 ODBC 驱动程序从 ServiceNow MySQL 数据库中提取,而不是 MySQL。我没有数据映射,所以我不能确定数据类型是什么。在这一点上,我猜它是某种字符串,而不是真正的时间戳/日期时间,但我无法确认这一点。

有没有人有任何想法如何使这项工作成为可能。返回结果 b. 跑半个小时不?

4

1 回答 1

0
SELECT *
 FROM OpenQuery(ServiceNowUAT, 
     'SELECT name FROM DATABASE.[SCHEMA].[TableName]
      WHERE CAST(sys_updated_on as TIMESTAMP) BETWEEN DATEADD(DAY, -2, now()) and now()'
)

Spark Interactive SQL 参考.pdf

于 2016-11-17T19:33:05.530 回答