如何在日期中添加/减去天数

时间:2016-03-01 09:25:32

标签: sql sql-server tsql dateadd

假设我有这张表:

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

时无效

4 个答案:

答案 0 :(得分:2)

试试这个

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()

答案 1 :(得分:0)

当然,&#39;因为您的上限范围是相同的日期,并且由于您有时间存储在该列中,您什么也得不到。

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

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

答案 2 :(得分:0)

尝试将@var置于dateadd:

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

答案 3 :(得分:0)

当@var为0时,您正试图在00:00:00获取当天的值。 举个例子 tmp.date&gt; =&#39; 2016-03-01 00:00:00&#39;和tmp.date&lt; =&#39; 2016-03-01 00:00:00&#39;

如果tmp表格有数小时,例如2016-03-01 08:00:00&#39;,则不会选择此值。