[英]Convert SAS Datetime to SQL Datetime
這就是我目前面臨的問題。 我很難將SAS日期時間轉換為SQL日期時間。
SAS Datetime中的顯示值是28Mar2018:10:01:06,在執行Proc SQL時實際上是“ 28Mar2018:10:01:96” dt。
顯示值為SQL日期時間為2018-03-28 10:01:06.000,當使用SQL傳遞時實際上為'2018-03-28 10:01:06.000'。
我有SAS日期時間值,並想在SQL直通語句中使用它。 我一直在網上找到,但找不到任何相關信息。 我能找到的最多只是轉換日期。
Passthrough語句應該是這樣的(沒有connect to xxx語句)
%let sasdatetime=2018-03-28 10:01:06.000;
/*How to convert the value above to SQL format and apply in proc sql below*/
Proc sql:
connect to xxx
select *
from table A
where birthdatetime = &thedatetime;
尋求您的好建議。
以下是SAS直通到Teradata的示例。 您可以為所需的數據庫進行更改:
%let sasdatetime=2018-03-28 10:01:06.000;
%let tdlogin=%unquote(user=yourDBUsrNm pwd=yourDBPassWord MODE=Teradata tdpid=servername);
PROC SQL;
connect to teradata( &tdlogin connection = global);
CREATE TABLE work.test1 AS
SELECT * from connection to teradata
( select *
from table A
where birthdatetime = compress("'"||put(&sasdatetime,yymmddn8.)||"'")
);
disconnect from teradata;
QUIT;
您的查詢稱為顯式SQL傳遞,您可以在其中通過使用connect語句連接到數據庫。 在顯式傳遞中,您必須遵守特定數據庫的規則(不能使用SAS的任何組件),但是顯式SQL傳遞僅允許您使用宏變量。
在各種數據庫中,通常按如下所示訪問日期或日期時間,這與我們在SAS中訪問日期的方式大不相同。
where datecolumn = '2018-03-28'
如下所示使用宏變量並在單引號中使用的問題是,在大多數數據庫中,宏變量不會解析為用於指示列名的單引號和雙引號,因此宏變量上的單引號或雙引號均無效
where datecolumn = '¯ovariable'
解決的一種方法是定義宏變量,然后使用%bquote,如下所示。
%let sasdatetime=2018-03-28 10:01:06.000;
Proc sql:
connect to xxx
select *
from table A
where birthdatetime = %bquote('&sasdatetime') ;
另一種方法是在定義宏變量時使用單引號,然后在查詢中不使用引號,如下所示。
%let sasdatetime='2018-03-28 10:01:06.000';
Proc sql:
connect to xxx
select *
from table A
where birthdatetime = &sasdatetime ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.