2017-02-24 16 views
1

こんにちは皆私は何らかの会計システムに取り組んでおり、いくつかの問題に遭遇しました。問題は既にこのサイトのAbdul Rasheedによって答えられています。SQLサーバーの2つの日付の開始日と終了日を取得する方法

これは、コード

declare @sDate datetime, 
    @eDate datetime 

select @sDate = '2013-02-21', 
    @eDate = '2013-04-25'; 

with CTE_TEST 
as (
    select @sDate SDATE, 
     DATEADD(s, - 1, DATEADD(mm, DATEDIFF(m, 0, @sDate) + 1, 0)) EDATE 

    union all 

    select EDATE + 1, 
     DATEADD(s, - 1, DATEADD(mm, DATEDIFF(m, 0, DATEADD(MONTH, 1, SDATE)) + 1, 0)) 
    from CTE_TEST C 
    where DATEADD(MONTH, 1, SDATE) < DATEADD(s, - 1, DATEADD(mm, DATEDIFF(m, 0, @eDate) + 1, 0)) 
    ) 
select DATENAME(MONTH, SDATE) MNAME, 
    SDATE, (case when EDATE > @eDate then @eDate else EDATE end) EDATE 
from CTE_TEST 

コードは素晴らしい作品とちょうど私が欲しいもののようです。私は新しいテーブルに結果を挿入したいと思います。それ、どうやったら出来るの?

+0

予想される出力は何ですか? – Mansoor

+0

@Abdul Rasheedのコード –

+0

タイトルが実際の質問と一致することを確認してください – HoneyBadger

答えて

0
CREATE TABLE T(MNAME VARCHAR(20),SDATE DATETIME,EDATE DATETIME) 

     IF OBJECT_ID ('tempdb..#T') IS NOT NULL 
     DROP TABLE #T 

      declare @sDate datetime, 
      @eDate datetime 
      select @sDate = '2013-02-21', 
      @eDate = '2013-04-25' 
      ;WITH CTE_TEST AS (
      SELECT @sDate SDATE,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@sDate)+1,0)) EDATE 
      UNION ALL 
      SELECT EDATE+1,DATEADD(s,-1,DATEADD(mm,DATEDIFF(m,0,DATEADD(MONTH,1,SDATE))+1,0)) 
      FROM CTE_TEST C WHERE DATEADD(MONTH,1,SDATE) < DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@eDate)+1,0)) 
    ) 
      SELECT DATENAME(MONTH,SDATE) MNAME,SDATE,(CASE WHEN EDATE > @eDate THEN @eDate ELSE EDATE END) EDATE INTO #T FROM CTE_TEST 



INSERT INTO T( MNAME, 
       SDATE, 
       EDATE) 
Select MNAME, 
SDATE, 
EDATE from #T 
+0

ありがとうございます! –

+0

@RedietZewduもしそれが動作すればあなたは答えとしてそれを評価してください – mohan111

関連する問題