2017-05-03 10 views
1

私はかなり新しいSQLですが、@StartDateと@EndDateの値を手動で入力する必要がないように、ストアドプロシージャの編集を検討しています。 コードは次のとおりです。基本的には、StartDateを前月の開始日、EndDateを現在の日付にします。 これは非常に簡単かもしれませんが、私たちの問題に関連するように見えるオンラインのものは見つかりません。ストアドプロシージャ、月の始まりとしてstartdateを返す

USE [OnlineOrdering] 
GO 

DECLARE @return_value int 

EXEC @return_value = [dbo].[usp_GetPayPalOrders] 
     @StartDate = N'2017-01-01 00:00:00', 
     @EndDate = N'2017-01-31 23:59:59' 

SELECT 'Return Value' = @return_value 
GO 

ただ、注意すべき、私はもともと、この手順を書いていない、私はちょうどそれが簡単に実行できるようにすること、日付を自動化できるようにしたいと思います。

は、あなたがこれを行う先月の最初の日を取得するには、あなたに

+0

パラメータのタイプ(date、datetime、varchar)は何ですか、なぜタイムコンポーネントを渡していますか?日付は 'date'または' datetime'として非ゼロ時間部分に格納されていますか? –

+0

あなたの例とあなたのコメントは一致せず、混乱して遅れます。おそらく、あなたは@EndDateの値が前の月の最後の日でなければならないと言ったのでしょうか? – SMor

+0

こんにちは、はい、申し訳ありません。 @EndDateは前月の最後の日付でなければなりません。私はいくつかの提案を列挙し、それらが問題を解決するかどうかを調べるつもりです。フィードバックいただきありがとうございます。 –

答えて

1

ありがとう:

SELECTをDATEADD(月、-1、DATEADD(ミリメートル、DATEDIFF(M、0、GETDATE()) 、0))

だから、あなたのコードは次のようになります。

USE [OnlineOrdering] 
GO 

DECLARE @firstDayLastMonth datetime = DATEADD(month,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()), 0)), @now datetime = GETDATE() 
DECLARE @return_value int 

EXEC @return_value = [dbo].[usp_GetPayPalOrders] 
    @StartDate = @firstDayLastMonth, 
    @EndDate = @now 

SELECT 'Return Value' = @return_value 
GO 
+0

変数宣言で 'SELECT'を使う必要はありません –

+0

本当にありがとうございます!値は直接割り当てることができます、私は答えを編集します。別の「select @ firstDayLastMonth」文を書くことなく選択を行うことができるため、私はそれを自分で使用します:) –

+0

これはまさに私が探していたものです。どうもありがとうございます! –

1

あなたはSPEのために先月の日得ることができますEOMONTH、例えばとcific日:

SELECT EOMONTH(GETDATE()) 

2017-05-31を返します。

この関数は、2番目のパラメータとして月のオフセットを受け入れます。あなたが前の月の最終日を取得することができます:

SELECT EOMONTH(GETDATE(),-1) 

EOMONTHがサポートされているすべてのSQL Serverのバージョン、すなわち2012年以降で利用可能です。

あなたのケースでは、あなたが書くことができる:日付は時刻コンポーネントなしdateタイプやdatetimeを使用して、つまり、...日付として格納されている場合

declare @start date EOMONTH(GetDate(),-1), @end date = GetDate() 

EXEC @return_value = [dbo].[usp_GetPayPalOrders] @start, @end 

これは動作します。そうでない場合は、@endに時間オフセットを追加する必要があります。

declare @start date=getdate(), @endDay datetime=cast(getdate() as date) 
declare @end datetime = @endDay + cast('23:59:59' as datetime) 
関連する問題