2016-04-07 84 views
1

想知道我是否在DATEADD和一個變量中丟失了一些非常簡單的東西,並且我確定必須有一種更優雅的方式來做我想做的事情。SQL 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) 

反正是有它壓縮到一個線,其在事物的宏偉計劃不是大規模,但因爲這是東西,將在每一個我們建立這個storedproc它看起來像是節省一點的時間(以及擴大我的知識,這是我張貼這個真正的原因!)

提前乾杯。

回答

5

是的。執行SELECTDATEADD()

DECLARE @EndDate date; 

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

注:

  • 使用分號終止每個語句(可以更容易地按照邏輯)。
  • 嵌套SELECTSET是沒有必要的。 A SELECT可以分配一個變量。
  • 這兩個都假定(給定的@UserId(可能是合理的)有(至多)一個匹配。
  • 而且,對於日期部分功能,我強烈建議拼寫出日期部分(「年」,「月」,「日」)而不是縮寫。我認爲這使代碼更易於理解和維護。
+0

完美的歡呼,我知道這將是一件非常明顯的事情,實際上更有意義。奇怪的是,所有好的建議我總是主動刪除「;」由於c#的原因,我總是把它們放入pavlovian響應中,但從未檢查過它是否正確,因爲我們之前的所有代碼都沒有它們,所以我錯誤地認爲它會導致問題很好知道它們可以保留在終止一個聲明,並使其更具可讀性。 – Litation