簡體   English   中英

將SAS日期時間轉換為SQL日期時間

[英]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 = '&macrovariable'

解決的一種方法是定義宏變量,然后使用%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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM