2017-10-23 2 views
1

Ich verwende SAS, um eine Verbindung zu einer Oracle-Datenbank herzustellen und Probleme mit den Daten zu bekommen. Gibt es bei Verwendung von Pass-Through-Abfragen eine PL/SQL-Alternative zu "DATEPART()", bei der Datumsangaben als SAS-Datum und nicht als SAS-Zeitstempel gespeichert werden? Ich würde es vorziehen, LIBNAME oder den SQL-Konverter von SAS zu vermeiden, und möchte dies ohne einen zusätzlichen SAS-Datenschritt tun.Oracle Daten zu SAS in Passthrough SQL

Ich habe mit DBSASTYPE = experimentiert, aber es scheint nicht anwendbar auf Passthrough SQL.

Beispiel - "SYS_DATE" aus dieser Abfrage wird als SAS-Zeitstempel und nicht als SAS-Datum gespeichert.

Proc SQL; 
Create Table WORK.DATE_ORACLE as 
Select * From Connection to ORACLE 
(
SELECT trunc(SYSDATE) as SYS_DATE FROM DUAL 
); 
quit ; 
+0

Sie können den Select * -Anteil ändern, nicht wahr? Wählen Sie datepart (sys_date) aus der Verbindung zu ORacle ..... – Reeza

+0

Würde 'cast (SYSDATE als Datum) wie SYS_DATE' funktionieren? (Es funktioniert für SQL-Server, ich habe nicht mit Oracle zu testen). – david25272

+0

Casting als Datum funktioniert nicht - es wird als Oracle-Datum zurückgegeben, das einen Zeitabschnitt enthält. SAS liest das als Zeitstempel – Netbrian

Antwort

1

Wie Reeza in Kommentaren erwähnt, ist dies wahrscheinlich am einfachsten im non-Passthrough-Abschnitt getan.

Proc SQL; 
Create Table WORK.DATE_ORACLE as 
Select datepart(sysdate) as sysdate From Connection to ORACLE 
(
SELECT trunc(SYSDATE) as SYS_DATE FROM DUAL 
); 
quit ; 

Wenn Sie das nicht können, dann sind Sie wahrscheinlich am besten Oracle ab fragt das Datum in einer Textzeichenfolge zu drehen, es über zu bringen und dann wieder Umwandlung sie zurück.

+0

Vielen Dank für diese Lösung. Es sieht so aus, als könnte ich nicht genau das machen, was ich wollte, und das kommt mir am nächsten. – Netbrian