Использование OPENQUERY с базой данных Oracle для запроса диапазона дат

У нас есть база данных Oracle, к которой мы обращаемся через OpenQuery для некоторых вещей. По-видимому, вы не можете выполнять сравнение дат непосредственно в OpenQuery с помощью драйвера OleDB, поэтому, чтобы обойти это, вам нужно преобразовать даты в даты Жюльена и сравнить эти числа. У меня есть следующий запрос, который мы пытаемся выполнить в 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 и может иметь значение null, если это имеет значение.

Кто-нибудь знает, что я могу сделать, чтобы заставить это работать через OpenQuery?

Редактировать:

Я проверил преобразование даты Жюльена, и определенно происходит что-то подозрительное, но я не знаю, что его вызвало. Если я выполню это в 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

Ответы на вопрос(1)

Ваш ответ на вопрос