将OPENQUERY与Oracle数据库一起使用以查询日期范围

皮特

我们有一个Oracle数据库,可以通过OpenQuery访问一些东西。您显然无法使用OleDB驱动程序直接在OpenQuery中进行日期比较,因此,要解决此问题,您必须将日期转换为Julien日期并比较这些数字。我有以下查询,我们正在尝试在MS SQL Server中执行此查询(GPROD是通过OleDb驱动程序的链接服务器):

SELECT *
FROM  OPENQUERY(GPROD, '
     SELECT * 
     FROM ORD_HDR_HST 
     WHERE (cast(to_number(to_char(SHIP_DATE ,''J'')) as numeric(10,0))  >= cast(to_number(to_char(to_date(''01-JAN-2015'') ,''J'')) as numeric(10,0))  AND 
            cast(to_number(to_char(SHIP_DATE ,''J'')) as numeric(10,0))  <= cast(to_number(to_char(to_date(''21-SEP-2015'') ,''J'')) as numeric(10,0)) )')

该查询不返回任何结果,但也不会产生任何错误。

如果我在Oracle SQL Developer中执行此查询,那么它将正常工作并返回数千行:

SELECT * 
FROM ORD_HDR_HST 
WHERE (cast(to_number(to_char(SHIP_DATE ,'J')) as numeric(10,0))  >= cast(to_number(to_char(to_date('01-JAN-2015') ,'J')) as numeric(10,0))  AND 
       cast(to_number(to_char(SHIP_DATE ,'J')) as numeric(10,0))  <= cast(to_number(to_char(to_date('21-SEP-2015') ,'J')) as numeric(10,0)) )

SHIP_DATE字段的类型为DATE,并且在此情况下可以为空。

有谁知道我能怎么做才能通过OpenQuery做到这一点?

编辑:

我测试了Julien Date转换,肯定发生了一些麻烦,但我不知道是什么原因造成的。如果我在Oracle中执行此操作:

select cast(to_number(to_char(to_date('01-JAN-2015') ,'J')) as numeric(10,0)) from dual

我得到2457024

如果我在SQL Server上执行此操作:

select * from OPENQUERY(GPROD, 'select cast(to_number(to_char(to_date(''01-JAN-2015'') ,''J'')) as numeric(10,0)) from dual')

我得到1721443

皮特

我找到了解决问题的办法。通过为日期指定掩码,它将提供正确的结果。使用:

to_char(to_date('01-JAN-2015','DD-MON-YYYY') ,'J') 

代替

to_char(to_date('01-JAN-2015') ,'J') 

通过OpenQuery或直接从Oracle获得相同的结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

与Oracle数据库连接一起使用sparklyr

将recyclerview与数据库一起使用

将 arrayList 与数据库一起使用?

将MSChart与Access数据库一起使用

将 RecyclerView 与数据库一起使用

将ViewModel与SQLite数据库而不是Room数据库一起使用

JPA查询可与Postgresql的日期范围一起使用

使用1个数据库字段一起解析日期

将FCM与另一个数据库一起使用

将Oracle ODP.NET 12c第2版与Oracle 11g r2数据库一起使用

将git与Pick D3数据库一起使用

将Laravel身份验证与驱动程序数据库一起使用

如何将Spring Boot与MySQL数据库和JPA一起使用?

如何将单个dbml文件与不同的数据库一起使用

例外:将CreateDocumentUri与分区文档数据库一起使用时,提供了分区键...

将Django服务器发送的事件与数据库帖子保存一起使用

将Hibernate与H2数据库和joda DateTime一起使用

将两个数据库与金字塔SqlAlchemy一起使用

将函数模拟器与实时数据库一起使用

找不到字段的设置器-将Kotlin与Room数据库一起使用

在Visual Studio 2010中将MySQL数据库与Entity Framework一起使用

将SQLCipher与android附带的sqlite数据库文件一起使用

将ASP.Net SqlMembershipProvider与多个数据库一起使用

将Spring Session JDBC与现有数据库一起使用(不是springboot)

如何将Room Persistence Library与预填充的数据库一起使用?

将验证器与未保存在数据库中的类一起使用

CodeIgniter-将数据库连接与AJAX请求一起使用

将dplyr与数据库一起使用,而无需创建显式的DBI对象

将多个托管对象上下文与核心数据库一起使用