星期一下面的剧本是3天,其他日子则返回1天。 我认为它不能正常工作。 你能帮我解决一下吗?
MyDate>=dateadd(dd,case substring(datename(dw,getdate()),1,3)
when 'MON' then -3 else -1 end,getdate())
答案 0 :(得分:0)
MyDate>=case
when datename(dw,getdate())='Monday'
then dateadd(day,-3,cast(getdate() as date))
else dateadd(day,-1,cast(getdate() as date)) end
答案 1 :(得分:0)
您可以使用以下查询。
select case when datepart(weekday ,cast((floor(cast(getdate() as float))) as datetime)) = 2
then (select cast((floor(cast(getdate() as float))-3) as datetime))
else (select cast((floor(cast(getdate() as float))-1) as datetime))
end as Date
答案 2 :(得分:-1)
我认为这可能是因为您使用GETDATE()
作为DATEADD
的第3个参数,其中也包含时间部分。
这将花费你3天的时间(实际上落后3 * 24小时),但它不会捕捉星期五的开始或3 * 24小时前发生的任何事情。
假设您在星期一上午11:45运行查询,这将从星期五上午11:45开始获取所有数据,但在此之前没有任何内容,这是因为"时间"部分数据。
以下是代码的修改版本,它将捕获星期五(全天)发生的所有数据/行。
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()
转换为日期和转换为日期时间,以生成包含当天开始的日期/时间组合。
以下是它的作用的简单示例:
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