我对SQL很陌生,并且很难弄清楚如何使用if语句我试图根据今天的日期来确定开始日期和结束日期。目前,我的标准设置如下:
WHERE training.launch_date >= CONVERT(datetime, '2017-08-04')
AND training.launch_date <= CONVERT(datetime, '2017-08-10')
我需要做的是自动化查询,所以我需要始终让Start_Date等于上周五,结束日期是即将到来的星期四。我有点搞乱它,但似乎无法弄清楚正确的语法。这是我尝试过的,但它当然不起作用。
WHERE training.launch_date >= (if(select datepart(dw,getdate()) = 6)
Select getdate()
ELSE (select getdate() - datepart(dw,getdate())))
AND training.launch_date <= (if(select datepart(dw,getdate()) = 6)
Select getdate() + 6
ELSE (select getdate() - datepart(dw,getdate())+6))
对此的任何帮助将不胜感激。
答案 0 :(得分:0)
这是单程......
declare @date datetime = '20170815'
SELECT
case
when datepart(weekday, @date) >5 then
DATEADD(DAY, 4, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0))
else DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0))
end
,DATEADD(DAY,(CASE DATEPART(DW,@date)
WHEN 5 THEN 7
WHEN 6 THEN 6
WHEN 7 THEN 5
ELSE 5 - DATEPART(DW,@date) END),@date)
所以在您的代码中......
WHERE
training.launch_date >= case
when datepart(weekday, getdate()) >5 then
DATEADD(DAY, 4, DATEADD(WEEK, DATEDIFF(WEEK, 0, getdate()), 0))
else DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, getdate()), 0))
end
AND training.launch_date <=DATEADD(DAY,(CASE DATEPART(DW,getdate())
WHEN 5 THEN 7
WHEN 6 THEN 6
WHEN 7 THEN 5
ELSE 5 - DATEPART(DW,getdate()) END),getdate())
答案 1 :(得分:0)
您不能在查询中使用selenium.common.exceptions.WebDriverException: Message: Unexpected error
launching Internet Explorer. IELaunchURL() returned HRESULT 800700C1 ('%1 is
not a valid Win32 application.') for URL 'http://localhost:58689/'
等流控制语句。您只能使用IF
等表达式。
在处理日期时,您必须记住&#34;日期&#34;可以包括时间分量,因此最好使用&lt;第二天,而不是期待00:00:00的确切日期。
您的查询可以写成:
CASE WHEN
说明:
SET DATEFIRST 5
-- Remove hours, minutes etc.
DECLARE @CurrentDay DATETIME = CONVERT( DATE, GETDATE())
SELECT *
.....
WHERE training.launch_date >= @CurrentDay + 1 - DATEPART( dw, @CurrentDay )
AND training.launch_date < @CurrentDay + 8 - DATEPART( dw, @CurrentDay )
- 设置一周的第一天。见MSDN
如果由于某种原因你不想使用SET DATEFIRST
,那么你可以手动抵消一周的开始:
SET DATEFIRST