-3

SQL サーバーに 2 つの日付があり、2 か月で重複しています。各月に何日重複しているかを調べたいと考えています。例えば:

Start date is : 26-Sep-2012
End Date is : 10-Oct-2012

Sept- 5 days
October - 10 days

各月の日付のリストとともに。

4

3 に答える 3

2
declare @start datetime;
declare @end datetime;
set @start = '20120926';
set @end = '20121010';

SELECT (DAY(DATEADD (m, 1, DATEADD(d, 1 - DAY(@start), @start))-1)
        - DAY(@start) + 1) AS DaysLeftStart,
        DAY(@end) AS DaysEnd

フィドル: http://sqlfiddle.com/#!3/d41d8/4441/0

于 2012-09-16T14:09:21.913 に答える
0
DECLARE @start DATETIME, @end DATETIME;

SELECT @start = '20120926', @end = '20121010';

;WITH c(d) AS
(
  SELECT TOP (DATEDIFF(DAY, @start, @end)+1)
    DATEADD(DAY, ROW_NUMBER() OVER (ORDER BY name)-1, @start)
    FROM sys.all_columns
) 
SELECT 
  [date] = DATEADD(MONTH, DATEDIFF(MONTH, 0, d), 0), 
  [days] = COUNT(*)
FROM c GROUP BY DATEDIFF(MONTH, 0, d)
UNION ALL SELECT d, NULL FROM c;

結果:

date                        days
-----------------------     -----
2012-09-01 00:00:00.000     5
2012-10-01 00:00:00.000     10
2012-09-26 00:00:00.000     NULL
2012-09-27 00:00:00.000     NULL
2012-09-28 00:00:00.000     NULL
2012-09-29 00:00:00.000     NULL
2012-09-30 00:00:00.000     NULL
2012-10-01 00:00:00.000     NULL
2012-10-02 00:00:00.000     NULL
2012-10-03 00:00:00.000     NULL
2012-10-04 00:00:00.000     NULL
2012-10-05 00:00:00.000     NULL
2012-10-06 00:00:00.000     NULL
2012-10-07 00:00:00.000     NULL
2012-10-08 00:00:00.000     NULL
2012-10-09 00:00:00.000     NULL
2012-10-10 00:00:00.000     NULL
于 2012-09-16T13:44:13.053 に答える
-1

ここでは、カレンダー テーブルの作成に関する詳細を確認できます。これを使用して、次のようなクエリを実行できます。

SELECT CalendarMonth, count(*) day_num 
FROM dbo.Calendar 
WHERE CalendarDate  between @start_date and @end_date;
于 2012-09-16T13:45:34.827 に答える