Uso de OPENQUERY con una base de datos Oracle para consultar un rango de fechas
Tenemos una base de datos Oracle a la que accedemos a través de OpenQuery para algunas cosas. Aparentemente no puede hacer comparaciones de fechas directamente en OpenQuery usando el controlador OleDB, por lo que para evitar esto debe convertir las fechas a fechas de Julien y comparar esos números. Tengo la siguiente consulta de que estamos tratando de ejecutar esto en MS SQL Server (GPROD es un servidor vinculado a través del controlador 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)) )')
Esta consulta no devuelve resultados pero tampoco produce errores.
Si ejecuto esta consulta en Oracle SQL Developer, funciona bien y devuelve miles de filas:
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)) )
losSHIP_DATE
El campo es de tipo FECHA y es anulable, si eso importa.
¿Alguien sabe qué puedo hacer para que esto funcione a través de OpenQuery?
Editar:
Hice una prueba de la conversión de Julien Date y definitivamente está sucediendo algo sospechoso, pero no sé qué lo está causando. Si ejecuto esto en Oracle:
select cast(to_number(to_char(to_date('01-JAN-2015') ,'J')) as numeric(10,0)) from dual
Consigo 2457024
Si ejecuto esto en SQL Server:
select * from OPENQUERY(GPROD, 'select cast(to_number(to_char(to_date(''01-JAN-2015'') ,''J'')) as numeric(10,0)) from dual')
Consigo 1721443