【问题标题】:DATEADD - How do i make comparisonsDATEADD - 我如何进行比较
【发布时间】:2012-02-06 06:10:13
【问题描述】:

我正在尝试检查第二次尝试(你可以想象密码尝试、下载尝试等)是否在从尝试 1 时间(@start)开始的时间限制(@window)内进行。当其他日期时间比较与关系运算符一起使用时,为什么会报告语法错误

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

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

预期输出类似于 0,但我得到 Incorrect syntax near '&lt;'.

【问题讨论】:

    标签: sql-server-2005 tsql compare relational dateadd


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 能否解释一下为什么 Sql Serevr Management Studio 会抱怨语法错误。当Select Blah blah blah from FOO where DATETIME &lt;[&gt;,&lt;=,&gt;=] ANOTHER DATETIME 之类的东西起作用时
    • 我猜是因为SQL不像“普通”编程语言那样通用,并且显式形式的逻辑运算符(,=,=)只能用于过滤(在 WHERE 子句中)。您只需要记住,在这种情况下,在 SELECT 语句中您需要使用 CASE 运算符
    【解决方案2】:
    select CAST((CASE 
                    WHEN DATEADD(MINUTE,@window,@start) <= @start
                    THEN 1
                    ELSE 0
            END) AS BIT)
    

    【讨论】:

      猜你喜欢
      • 2011-06-22
      • 2022-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多