2014-07-01 77 views
1

我有一個SQL代碼,無法理解其中的含義SQL編碼TO_DATE意思

proc sql; create table tito as 
select distinct j.perjobs_pidm, 
    , to_date(to_char(t.pertito_time_entry_date,'YYYYMMDD') ||t.pertito_time_in,'YYYYMMDDHH24MI') tmi 
        from stg.pertito t 
        , stg.perjobs j 

       where t.pertito_jobs_seqno = j.perjobs_seqno 
     ;quit; 

我聽不懂的部分是TO_DATE一部分。我如何將其更改爲SAS語言。代碼是什麼意思?謝謝!

+0

未提供用於轉換代碼的關鍵信息是STG是SAS本機庫還是數據庫庫,隨後哪些數據類型是列pertito_time_entry_date和pertito_time_in。 – vasja

回答

-1

即代碼正在兩列pertito_time_entry_datepertito_time_in,和格式化然後在代碼級聯它們:

to_char(t.pertito_time_entry_date,'YYYYMMDD') ||t.pertito_time_in

即整個塊被包裹在TO_DATE(),其格式的整個表達爲YYYYMMDDHH24MI。這將作爲SAS可以在tito.tmi列中瞭解的日期值進行存儲。

+0

我覺得這很難理解,它解釋了它在做什麼。你無法解釋它實際在做什麼(結合日期和時間)。 – Joe

1

這是SQL的等價輸入(put(var,DATE9。)||':'|| put(var2,TIME8。),DATETIME。),一種將日期和時間合併到日期時間的方法。一種優越的SAS方法是

dtvar = dhms(datevar,0,0,timevar); 

它使用DHMS(天小時分鐘秒)函數中的'days'日期和'秒'的時間。

這是可行的,因爲時間變量是自午夜以來的秒數;所以DHMS(date,0,0,time)創建一個日期時間變量。 IE瀏覽器,如果是早上8點整,你可以做兩種:

dhms(date,8,0,0) -> 8:00am on date 

dhms(date,0,0,480) -> 8:00am on date 

因爲480 = 60 * 8。

+0

我明白了,但與薩斯方法混淆dtvar = dhms(datevar,0,0,timevar);我會選擇變量tmi。 – user3780068

+0

什麼是dhms,爲什麼0 – user3780068

+0

'dhms'是一個函數,可以創建日期,時間,分鐘,秒之外的日期時間變量。由於時間變量是自午夜以來的秒數,因此可以使用DHMS(datevar,0,0,timevar)創建日期時間。 – Joe