2012-05-02 19 views
2

日付オブジェクトを抽出するSQL文があります。 Postgresでは正常に動作しますが、sasでは動作しません。部分クエリは次のようになります。sasに相当するdate_part関数

(case when date_part('month',run_date)::integer < 10 
    THEN '0'|| 
      date_part('month',run_date)::varchar(1)|| 
      date_part('year',run_date)::varchar(4) 
    else date_part('month',run_date)::varchar(2)||date_part('year',run_date)::varchar(4) 
    end) as our_date 

sasでは、date_part関数はありません。私はdatepart関数を試しました。しかし、それは同じ機能を実行していません。そのsql文をsasで実行させるにはどうすればよいですか?ありがとう。

答えて

10

DATEPART

data have; 
timestamp='01JAN2012:08:48'dt; 
run; 

proc sql; 
select datepart(timestamp) format=mmddyy10., 
timepart(timestamp) format=time., 
month(datepart(timestamp)), 
year(datepart(timestamp)) 
into :date , :time, :month, :year 
from have; 
quit; 

%put DATE: &date; 
%put TIME: &time; 
%put MONTH: &month; 
%put YEAR: &year; 
0

私はあなただけ

MONTH(run_date) 

YEAR(run_date) 
+0

を使用することができると思う「(Iは、プロシージャ・SQL内MONTH(run_date)を試みたが、それはnull値を返します。 "sasで)。 – swingfuture

+0

なぜ私はnull値を得たのか分かります。なぜなら、run_dateは通常のmmddyy10形式ではなく、DATETIME20形式を示しているからです。私はそれを最初に変換しなければならないだろうと思う。 – swingfuture

+3

'month()'と 'year()'関数は、日付の値に対して実行するように設計されています。 datetime値と比較して実行すると、SASのdatetimeと比較して日付が格納される方法の違いにより、通常はNULL値が返されます。 –

関連する問題