SAS EG日期/时间在何处

时间:2017-01-26 19:46:01

标签: sql sql-server tsql sas

我需要在我的 where 子句中使用日期/时间戳字段,它是>今天()下午1点

我将其设置为预定任务,因此"今天()"部分很重要 我不知道如何将它与时间片相结合 所有我能想到的就是这个 - 如果它甚至可以工作,它似乎是非常无效的代码

datepart(fielda)=today() and timepart(fielda)>01:00:00pm

我需要能够说这里的时间戳为"今天"在" 1 pm"

之后

*我将我的sql传递给基础数据库。

4 个答案:

答案 0 :(得分:2)

如果您直接使用PROC SQL(不是直通),则可以使用SAS dhms功能:

proc sql noprint;
  * Assume myData contains a var named datestamp;
  create table selected as
    select * from myData
    where datestamp > dhms(today(), 13, 0, 0)
  ;
quit;

该函数根据提供的Date,Hour,Minutes和Seconds值构造一个datetime值,因此dhms

如果您的SQL被传递到底层数据库,这将无效,因为它不太可能理解dhms函数。

答案 1 :(得分:0)

将date9格式的宏变量与时间相结合。这将创建一个日期时间文字。此方法将尽可能高效,因为SAS仅解析文字一次,然后可以使用datestamp上的任何现有索引。

%let today = %sysfunc(today(), date9.);

proc sql noprint;
    create table selected as
        select *
        from mydata
        where datestamp > "&TODAY.:13:00:00"dt
    ;
quit;

您可以使用以下代码确认该值。

%put %sysfunc(putn("&TODAY.:13:00:00"dt, mdyampm24.) );

答案 2 :(得分:0)

这是如此之多,更容易使用

to_date之间的日期字段(to_char(sysdate-1,'mm / dd / yyyy')|| '12:00:00','mm / dd / yyyy hh24:mi:ss')和to_date(to_char(sysdate) ,'mm / dd / yyyy')|| '08:32:27','mm / dd / yyyy hh24:mi:ss')

这将提供从昨天中午12点到今天上午8点32分的所有值

答案 3 :(得分:-1)

对于符合SQL92的数据库引擎,where语法如下:

EXTRACT(HOUR FROM fielda) >= 13