带有变量的SQL DATEADD

时间:2016-04-07 14:02:48

标签: sql sql-server sql-server-2008

只是想知道我是否错过了DATEADD和变量非常简单的东西,我确信必须有一种更优雅的方式来做我想做的事。

我目前有一堆高谈阔论,但作为其中的一部分,我有

DECLARE @EndDate date

SET @EndDate = '2016-02-01'
SET @EndDate = DATEADD(DD,1, @EndDate)

现在在最终版本中,第一个@EndDate设置了一个select语句但是为了测试我必须硬编码,因为它是在用户启动报告时生成的,而不是每次都生成报告让它变得简单。我们的想法是,当用户输入日期时,搜索包含该日期,而不是仅仅是前一天的午夜。

如果它有帮助,那么将使用的是select语句。

     DECLARE @EndDate date

    SET @EndDate = (SELECT atvcEndDate FROM tbUserReport WHERE atvcUserId = @UserId)
    SET @EndDate = DATEADD(DD,1, @EndDate)

无论如何将它压缩到一行,它在宏观方案中并不大,但是因为这是我们为此构建的每个存储过程中的东西,它似乎可以节省一些时间(如以及扩展我的知识,这是我发布这个的真正原因!)

提前干杯。

1 个答案:

答案 0 :(得分:5)

是。在DATEADD()

中执行SELECT
 DECLARE @EndDate date;

 SELECT @EndDate = DATEADD(day, 1, atvcEndDate)
 FROM tbUserReport
 WHERE atvcUserId = @UserId;

注意:

  • 使用分号终止每个语句(使其更容易遵循逻辑)。
  • SELECT中的嵌套SET不是必需的。 SELECT可以指定变量。
  • 这两个都假设给定@UserId(最多)有一个匹配(可能是合理的)。
  • 并且,对于日期部分功能,我强烈建议拼写日期部分("年","月","日")而不是缩写。我认为这使代码更容易理解和维护。