选择查询从星期五到星期四显示数据

时间:2015-09-04 19:10:01

标签: sql-server-2008 date

我的日期字段应该基于shipdate如何运行Select语句并让它从星期五到星期四返回数据而不在日期进行硬编码?

这样的东西
Select * from shippinginfo where shipdate between 'Friday' and 'Thursday'

为了一点点清晰,这就是我想要实现的目标 where子句应该在上周的星期五和星期四之间。因此,例如本周将是2015年8月28日 - 2015年9月3日,但下周将是2015年4月9日 - 2015年10月9日

2 个答案:

答案 0 :(得分:2)

如果您想要返回上周五和本周四之间的间隔,可以使用如下的日期函数。

这假设周从星期一开始,如果不是,你将不得不稍微调整一下。

select * from shippinginfo 
where shipdate between dateadd(day, -3, getdate()-datepart(DW, getdate())) 
                   and dateadd(day,  4, getdate()-datepart(DW, getdate()))

逻辑是:取当前日期并减去工作日的数字,然后减去3得到上周五或加4来得到这个星期四。

我确信它可以改进,但它应该给你一个想法。

正如xQbert在评论中正确提到的那样,如果您的shipdate列是日期时间值(由于时间组件的问题),这可能会给出不正确的结果,如果是这样,您可以修改逻辑或将shipdate强制转换为date

答案 1 :(得分:0)

至少这个你必须提供星期五的日期(因为计算机不知道是星期五)。到那个日期的+6是星期四。

例如: -

第1步: - 您通过了日期: - 2015年8月14日(FRI)

第2步: - 日期+6: - 2015年8月20日(THU)

注意: - 无论你通过+6天增量完成。所以,如果你想要星期五作为第一个,那么通过星期五日期。