Verwenden von OPENQUERY mit einer Oracle-Datenbank zum Abfragen eines Datumsbereichs
Wir haben eine Oracle-Datenbank, auf die wir für einige Dinge über OpenQuery zugreifen. Offensichtlich können Sie mit dem OleDB-Treiber keine Datumsvergleiche direkt in OpenQuery durchführen. Um dies zu umgehen, müssen Sie die Daten in Julien-Daten konvertieren und diese Zahlen vergleichen. Ich habe die folgende Abfrage, die wir versuchen, dies in MS SQL Server auszuführen (GPROD ist ein Verbindungsserver über den OleDb-Treiber):
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)) )')
Diese Abfrage gibt keine Ergebnisse zurück, erzeugt aber auch keinen Fehler.
Wenn ich diese Abfrage in Oracle SQL Developer ausführe, funktioniert sie einwandfrei und gibt Tausende von Zeilen zurück:
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)) )
DasSHIP_DATE
as @ -Feld ist vom Typ DATE und kann bei Bedarf auf Null gesetzt werden.
Weiß jemand, was ich tun kann, um dies über OpenQuery zum Laufen zu bringen?
Bearbeiten
Ich habe die Julien Date-Konvertierung getestet und es ist definitiv etwas faul im Gange, aber ich weiß nicht, woran es liegt. Wenn ich dies in Oracle ausführe:
select cast(to_number(to_char(to_date('01-JAN-2015') ,'J')) as numeric(10,0)) from dual
Ich bekomme 2457024
Wenn ich das auf SQL Server ausführe:
select * from OPENQUERY(GPROD, 'select cast(to_number(to_char(to_date(''01-JAN-2015'') ,''J'')) as numeric(10,0)) from dual')
Ich bekomme 1721443