如何从日期开始 add/subtract 天

How to add/subtract days from a date

假设我有这个 table :

DECLARE @Var INT  
SET @Var = (select day from source)
SELECT * FRom TMP
INTO #TARGET
Where tmp.date >= dateadd(day,datediff(day,0,GETDATE()),0) - @Var
          tmp.date  <= dateadd(day,datediff(day,0,GETDATE()),0)

查询在 @val != 0 时得到结果,但在 @val=0

时不工作

当然,因为您的范围上限是同一日期,并且由于您在该列中存储了时间,所以您什么也得不到。

declare
  @datebegin date = getdate(),
  @dateend date = getdate()

...

set @datebegin = dateadd(dd, -@var, @datebegin)
set @dateend = dateadd(dd, 1, @dateend) /* till the end of this day */

SELECT * FRom TMP
INTO #TARGET
Where tmp.date >= @datebegin and tmp.date  < @dateend

在最终查询之前尽可能多地计算

尝试将 @var 放在 dateadd 中:

dateadd(day,datediff(day,0,GETDATE())- @Var,0)

当@var 为 0 时,您正在尝试获取 00:00:00 当天的值。 举个例子 tmp.date >= '2016-03-01 00:00:00' 和 tmp.date <= '2016-03-01 00:00:00'

如果 tmp table 的时间类似于“2016-03-01 08:00:00”,则不会选择此值。

试试这个

DECLARE @Var INT  
SET @Var = (select day from source)
SELECT * FRom TMP
INTO #TARGET
Where tmp.date >= dateadd(day,datediff(day,0,GETDATE()),0) - @Var
          tmp.date  <= GETDATE()