假设我有这张表:
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
答案 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;,则不会选择此值。