如何仅在SQL Server中查找给定日期的最近星期二?
示例:今天是2018-09-09
,结果应该是2018-09-04
。
答案 0 :(得分:0)
使用case when
和datepart
函数并有条件地找到最近的星期二
select case datepart(dw,getdate()) when 7 then DATEADD(day, -4, getdate())
when 1 then DATEADD(day, -5, getdate())
when 2 then DATEADD(day, -6, getdate())
when 3 then DATEADD(day, -7, getdate())
when 4 then DATEADD(day, -1, getdate())
when 5 then DATEADD(day, -2, getdate())
when 6 then DATEADD(day, -3, getdate())
else getdate() end;
答案 1 :(得分:0)
显然我误解了这个问题,但是我将其保留在这里,以防其他人觉得它很有教育意义(它还演示了DATEPART( dw, ... )
结果如何因服务器而异,因此如上答案中所述的硬编码值可能会导致会因环境而产生错误的结果)-这将计算出与指定星期几最接近的日期(而问题特别是针对上一个星期二)...
您有个约会。您想找到最近的星期二,因此首先需要弄清楚给定日期代表星期几。 Google的“ mssql星期几”和first hit是您可以用来获取星期几的函数。它将是整数格式,因此您需要引用which numbers represents which days of the week。
结果将基于@@ DATEFIRST的值,该值定义一周的第一天(并且结果是基于一个的索引),因此您需要调整目标周几的值以与服务器的@@DATEFIRST
值。您可以这样执行:从@@DATEFIRST
中减去7
,加上目标周几的值(1:星期一至7:星期日),对结果取7
取模,然后加上{{1} }保持基于一个索引:
1
一旦您知道目标日期是星期几,什么数字代表星期二,就可以计算出天数差。如果幅度大于3,则通过加或减7进行调整以适合[-3,3]范围。
( 7 - @@DATEFIRST + @targetDayOfWeek ) % 7 + 1
结果:
答案 2 :(得分:0)
请尝试。
ThreadStart tsmain = new ThreadStart(this.ServiceCaptureImage);
thread = new Thread(tsmain);
ThreadStart tsmain1 = new ThreadStart(this.Draw_Bitmap);
continuous = new Thread(tsmain1);