2011-02-01 77 views
2

我想写一个SQL查询以返回从昨天晚上9点到当前时间的结果。据我所知,GETDATE()只会给我今天的结果,而GETDATE()-1会给我昨天的所有,我不想要。sql获取日期的具体时间

这又如何实现呢?

回答

5
select * from tbl 
where datecol between dateadd(hour,21,DATEDIFF(d,0,getdate()-1)) 
    and getdate() 
+0

为什么BETWEEN?不是`datecol> = ...`足够吗? – 2011-02-01 19:58:16

+0

@Joe - 它可能是一个包含未来数据的日历表。未指定 – RichardTheKiwi 2011-02-01 19:59:15

0

尝试使用此:

DATE_SUB(CURDATE(), INTERVAL 24-9 HOUR); 

这substracts 24-9小时,以当前的日期,这相当于从其减去1天,并添加9小时。

-1

试试这个,这工作完全在Sybase DATABSE

SELECT * FROM表,其中datecol> DATEADD(天,-1,DATEADD(小时,18,(转换(日期时间,转换(日期,GETDATE() )))))

说明:(内到外)

  1. 转换(日期,GETDATE()) - 这将让今天的日期,只有日期部分,即7/19/2015

  2. convert(datetime,convert(date,getdate())) - 将得到今天的日期,时间为00:00小时,即7/19/2015 12:00:00 AM

  3. dateadd (小时,21,(convert(datetime,convert(date,getdate()))) - 这将添加小时到以前获得的结果,即7/19/2015 9:00:00 PM

  4. dateadd (date,-1,dateadd(hour,18,(convert(datetime,convert(date,getdate()))))) - 最后这会减去获得日期的一天,即7/18/2015 9: 00:00 PM

这里哟你去...