我需要在我的 where 子句中使用日期/时间戳字段,它是>今天()下午1点
我将其设置为预定任务,因此"今天()"部分很重要 我不知道如何将它与时间片相结合 所有我能想到的就是这个 - 如果它甚至可以工作,它似乎是非常无效的代码
datepart(fielda)=today() and timepart(fielda)>01:00:00pm
我需要能够说这里的时间戳为"今天"在" 1 pm"
之后*我将我的sql传递给基础数据库。
答案 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