2012-02-06 60 views
3

我试图从第一次尝试(@start)开始,在第二次尝试(您可以设想密码尝试,下载尝试等任何事情)在时间限制(@window)内进行检查。为什么这个报告做了语法错误,当其他日期时间的比较关系运算符DATEADD - 我如何进行比较

declare @start datetime 
declare @window INT 
select @start = GETDATE(),@window = 10 

select CAST((DATEADD(MINUTE,@window,@start) <= @start) as BIT) 

预计产量为像0工作,但我得到Incorrect syntax near '<'.

回答

4

试试这个:

SELECT CASE WHEN DATEADD(MINUTE,@window,@start) <= @start THEN 1 ELSE 0 END 
+0

你能解释为什么Sql Serevr Management Studio抱怨语法错误。当像'选择等等等等,从foo其中DATETIME <[>,<=,> =另一个DATETIME'工作 – Deeptechtons 2012-02-06 06:17:23

+0

我想这是因为SQL是不是通用的一个“正常”的编程语言,等等逻辑运算符(<,>,<=,> =,=)以显式形式只能用于过滤(在WHERE子句中)。你只需要记住在这种情况下在SELECT语句中你需要使用一个CASE操作符 – 2012-02-06 07:45:17

0
select CAST((CASE 
       WHEN DATEADD(MINUTE,@window,@start) <= @start 
       THEN 1 
       ELSE 0 
     END) AS BIT)