我的日期字段应该基于shipdate
如何运行Select
语句并让它从星期五到星期四返回数据而不在日期进行硬编码?
像
这样的东西Select * from shippinginfo where shipdate between 'Friday' and 'Thursday'
为了一点点清晰,这就是我想要实现的目标 where子句应该在上周的星期五和星期四之间。因此,例如本周将是2015年8月28日 - 2015年9月3日,但下周将是2015年4月9日 - 2015年10月9日
答案 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天增量完成。所以,如果你想要星期五作为第一个,那么通过星期五日期。