2014-12-29 47 views
0

特定的结果之间使用声明之间两个日期时间参数不能正常工作的SQL Server

where [Column_name] >= @FromDate and [Column_name] <= @ToDate 

下面是我如何设定的值

DECLARE @Today AS datetime 
DECLARE @FromDate AS datetime 
DECLARE @ToDate AS datetime 

SET @Today = GetDate() 
SET @FromDate = @Today 
SET @ToDate = DATEADD("dd", 7, @Today) 

我发现它不工作无法正常显示正确的时候我把它从7更改为-7,它显示了一个额外的结果,而不是显示在当前查询中

你能告诉我我哪里出错了吗?

感谢

+0

结果究竟是什么问题? –

+0

它没有显示订单,但它的意思是@PatrickHofman – mfredy

+0

你能给出完整的陈述和数据吗?可能是[sqlfiddle](http://sqlfiddle.com/)。 –

回答

1

阿龙贝特朗对为什么你不应该使用between使用日期(见here)广泛的博客。

我从你的变量的名字猜测,你忘记了getdate()上的时间组件。所以,尽量声明你的变量为:

DECLARE @Today date; 
DECLARE @FromDate date; 
DECLARE @ToDate date; 

SET @Today = cast(GetDate() as date); 
SET @FromDate = @Today; 
SET @ToDate = DATEADD(day, 7, @Today); 

如果你想避免between,你可以写的比较逻辑为:

where [Column_name] >= @FromDate and [Column_name] < DATEADD(day, 1, @ToDate) 

编辑:

在-SQL预Server 2008个的版本,以下内容将删除时间分量:

DECLARE @Today datetime; 
DECLARE @FromDate datetime; 
DECLARE @ToDate datetime; 

SET @Today = DATEADD(day, DATEDIFF(day, 0, getdate()), 0); 
SET @FromDate = @Today; 
SET @ToDate = DATEADD(day, 7, @Today); 
+0

我收到一个错误,指出我宣布了一个无效的数据类型 – mfredy

+0

您使用的是哪个版本的SQL Server? –

+0

微软SQL Server管理工作室版本10.0.1 @GordonLinoff – mfredy

相关问题