【问题标题】:SQL comparison of dates does not work日期的 SQL 比较不起作用
【发布时间】:2013-09-04 13:05:34
【问题描述】:

此代码不起作用:

conn.Execute("CREATE PROCEDURE mySuperProcedure 
AS
BEGIN 
    IF GETDATE() >= DATEADD(hour," & waitHours & ",
        DATEADD(minutes," & waitMinutes & ",'" & now & "') 
    BEGIN
        blah blah...
    END
END")

SQL 代理作业每隔几秒运行一次此过程。它在特定时间之前不会执行“blah blah...”部分,但它每次都会执行,因为 IF 语句返回 true

可能有什么问题?这根本没有意义...... :'(

【问题讨论】:

  • 我想你在这里忘记了一个额外的右括号DATEADD(hour," & waitHours & ",DATEADD(minutes," & waitMinutes & ",'" & now & "')。它应该是DATEADD(hour," & waitHours & ", DATEADD(minutes," & waitMinutes & ",'" & now & "'))
  • 将其更改为打印 sql 而不是执行它并在此处发布。
  • 同样minutes 应该是minute
  • 嗯,我写的很快,不是复制粘贴。错误原来是来自 ASP 的 now 代码给出了不同的日期格式,mm/dd/yyyy,而 SQL 在 dd/ 中运行毫米/年年

标签: sql date asp-classic comparison getdate


【解决方案1】:

不清楚您尝试实现什么,但快速查看显示 2 个语法错误: ist MINUTE 不是分钟,并且您在 dateadd 中缺少 右括号

想到的一些问题:

  • 您是否尝试在每次作业时创建存储过程 执行?
  • 为什么不将作业设置为在您想要的时间执行 运行而不是每秒检查一次,如果时间到了 运行工作? :)
  • 为什么是动态 SQL?

【讨论】:

  • 嗯,我写的很快,不是复制粘贴。错误原来是来自 ASP 的 now 代码给出了不同的日期格式,mm/dd/yyyy,而 SQL 在 dd/ 中运行毫米/年年
  • 它是动态的,因为用户可以选择何时在数据库中发生某种变化。
  • 我明白了——那么在用户选择了他想要运行的时间之后,你能不创建 sql 作业吗?
猜你喜欢
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多