2016-06-14 10 views
-1

@startdateと@enddateの間に、開始日と終了日を入力するように求めるSQLクエリがあります。しかし、私がしようとしているのは、dateadd/getdateコードを使用して、今日の月から3ヶ月前に同じクエリを自動的に探しますが、2つを統合する方法を理解できません。dateaddとbetween between SQL Query

+3

例データと予想される出力を追加してください –

+2

どのRDBMSがこれですか? 'mysql'、' postgresql'、 'sql-server'、' oracle'、 'db2'のどれかを指定するタグを追加してください。 –

+0

当社にはWebベースのツールがあり、Accessのように見え、SQLをビルドして一番下に検証します。 ***ここでは、私が話しているサンプルがあります:***どこvwS_CoPrimPolicy.S_PrimPolicyExpDT "at"開始日と "at"終了日とvwS_Co.S_CoStatus = 'Customer'そしてvwS_Co.S_CoType = 'Automotive' ***クエリは、 Siebel DB。したがって、出力は10月のすべての7月に引っ張られたレコードのリストなので、10/1/16 - 10/31/16です。これは毎月実行され、常に90日先を見ています。 –

答えて

0
あなたは GETDATE()Why is the GETDATE() an invalid identifierに基づいてOracleで

DATEADD(MONTH,3,GETDATE()) 

DATEADD()を参照しているので、私は仮定し、SQLサーバで

、そしてあなたのコメントに基づいて

ADD_MONTHS(SYSDATE,3) 

Equivalent function for DATEADD() in OracleおよびSiebelがオンの場合あなたが必要とするsql-server

Where vwS_CoPrimPolicy.S_PrimPolicyExpDT Between @startdate And @enddate And vwS_Co.S_CoStatus = 'Customer' And vwS_Co.S_CoType = 'Automotive 
少しそれを破壊する

where vwS_CoPrimPolicy.S_PrimPolicyExpDT Between 

DATEFROMPARTS(YEAR(DATEADD(MONTH,3,GETDATE())),MONTH(DATEADD(MONTH,3,GETDATE())),1) 
    AND DATEADD(DAY,-1,DATEFROMPARTS(YEAR(DATEADD(MONTH,4,GETDATE())),MONTH(DATEADD(MONTH,4,GETDATE())),1)) 

And vwS_Co.S_CoStatus = 'Customer' And vwS_Co.S_CoType = 'Automotive 

になるために

あなたが実際に月の開始を探しているので、今日から月末まで3ヶ月3ヶ月今日から、それらヶ月は28,29かもしれません、30日、または31日間、実際に日付を3ヶ月先に見つけてから、月の初めに取得する必要がありますDATEFROMPARTS()はそのために便利です。その後、月末には、4ヶ月の日付を見つけて、1日前に戻ってください。