下面的脚本在星期一回溯3天,其他日子回溯1天。我认为它无法正常工作。你能帮我解决吗?
MyDate>=dateadd(dd,case substring(datename(dw,getdate()),1,3)
when 'MON' then -3 else -1 end,getdate())
我认为这可能是因为您将GETDATE()
用作第三个参数DATEADD
,它也具有时间部分。
这将使您落后3天(实际上是3 * 24小时),但是它无法捕获星期五的开始或3 * 24小时之前的任何事情。
假设您在星期一的11:45 AM运行查询,那么将从星期五11:45 AM开始获取星期五的所有数据,但在此之前没有任何信息,这是因为数据的“时间”部分。
下面是代码的修改版本,它将捕获星期五(全天)发生的所有数据/行。
MyDate>= dateadd(dd, case
substring(datename(dw,getdate()),1,3)
when 'MON'
then -3
else -1 end
,cast(cast(getdate() as date) as datetime))
要解决此问题,只需快速修改并转换getdate()
为date和to datetime即可生成包含一天中开始时间的日期/时间组合。
这是一个简短的示例:
select
getdate()
, cast(getdate() as date)
, cast(cast(getdate() as date) as datetime)
2016-08-24 13:05:11.603 | 2016-08-24 | 2016-08-24 00:00:00.000
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句