2016-04-07 15 views
1

DATEADDと変数で本当にシンプルなものが欠けているのではないかと思っています。私が欲しいことをするためにはよりエレガントな方法が必要です。SQL DATEADD with Variable

私は現在、熱弁の負荷を持っていますが、その一環として、私は

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本のライン、物事の壮大な計画での大規模なしないようにそれを圧縮するとにかくありますが、これは、我々はこのために構築し、すべてにStoredProcになります何かがあるとして、それは少しを救うために何かのように思えます(私の知識を広げて、私がこれを投稿する本当の理由です!)

前もって乾杯。

答えて

5

はい。 SELECT内部DATEADD()を行います。

DECLARE @EndDate date; 

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

注:

  • 使用セミコロン各ステートメントを終了する(それが簡単にロジックを追跡することができます)。
  • SETのネストされたSELECTは必要ありません。 SELECTは変数を割り当てることができます。
  • 両方とも、与えられた@UserId(おそらく妥当)に対して(多くても)1つの一致があると仮定します。
  • 日付部分の機能については、略語の代わりに日付部分( "年"、 "月"、 "日")のスペルを強くお勧めします。私は、これによりコードをより理解しやすく保守しやすくすると思います。
+0

完璧な歓声、私はそれが本当に明白なものであり、実際にはより意味があることを知っていました。奇妙なことに、私は常に積極的に ";"私はいつもパブロフの応答のためにC#のためにそれらを入れたが、それはOKであったかどうかをチェックしなかったSQLでは、前のすべてのコードはそれらを持っていないので、私は誤って、ステートメントを終了して読みやすくします。 – Litation