如何从日期开始 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()
假设我有这个 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()