【问题标题】:sql date difference issuesql日期差异问题
【发布时间】:2012-11-08 15:29:03
【问题描述】:

我正在研究 Telerik gridview,我应该在某些条件下显示警告,其中 1 个是:

如果到期日大于今天,并且警告天数为 3,那么它将显示所有到期日大于今天的记录,但只有在警告期内出现才会显示。

因此,如果今天的日期是 22-12-2012 并且到期日期是 25-12-2012 并且警告天数是 3,那么它应该选择该记录

到目前为止我尝试了什么:

 DateTime dtTodayDate = DateTime.Today;
   string strTodayDate = dtTodayDate.ToString("yyyy/MM/dd 00:00:00");
    strFilter += @"OR ( [DueDate] >= #" + strTodayDate + @"# AND [Warn_Days] > 0 AND [DueDate] - [Warn_Days] =#" + strTodayDate + @"# )";

无法对 System.DateTime 和 System.Int32 执行“-”操作。

【问题讨论】:

  • 我不太了解您的数据来自何处,但我会考虑在将数据发送到网格之前计算“警告日期”甚至“警告指示器”字段所以你的过滤逻辑可以更简单一些。

标签: sql sql-server-2008 telerik telerik-grid


【解决方案1】:

您使用了错误的分隔符,Access 使用了#。对于 SQL Server,只需将您的日期作为常规字符串传递:

strFilter += @"OR ( [DueDate] >= '" + strTodayDate + @"' AND [Warn_Days] > 0 AND [DueDate] - [Warn_Days] ='" + strTodayDate + @"' )";

但是,您应该改用参数化查询 - 您很有可能会在某些时候传递一个模棱两可的字符串,而不会得到您认为得到的日期值。

【讨论】:

  • 无法对 System.DateTime 和 System.Int32 执行“-”操作。警告天数是一个整数。
  • @Developer 应该可以工作,请在执行时发布整个查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-04
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多