2

特定の月の開始日から終了日までの分数の合計を求める SQL クエリを探しています。

例えば。2月の使用分数を探しています。

開始日時: 27-02-13 00:00:00 終了日時: 05-03-13 00:00:00

2 月の合計のみを探しているので、3 日間の合計 (分単位) のみが表示され、3 月までの余分な 5 日間は表示されません。

4

4 に答える 4

1

検証する方法はありませんが、次のようになります。

SELECT DATEDIFF(minute, startDate, CASE when endDate > EOMONTH(startDate) THEN EOMONTH(startDate) ELSE endDate END) FROM ...

GL!

于 2013-02-27T13:57:49.487 に答える
0

各プロセスを説明するために、手順を残しました。もちろん、これを簡単に折りたたむこともできますが、それはあなたに任せます。

これが私の解決策です http://www.sqlfiddle.com/#!3/b4991/1/0

SELECT *
  , DATEDIFF(minute, StartDAte, NewEndDate) AS TotalMinutes
FROM
(
  SELECT *
    , CASE WHEN TempDate > EndDate THEN EndDate ELSE TempDate END AS NewEndDate -- Either EOM or old EndDate, whichever is smaller
  FROM
  (
    SELECT *
      , DATEADD(month, 1, CAST(Year + '-' + Month + '-1' AS DATETIME)) AS TempDate -- first day of the next month
    FROM
    (
      select *
       , CAST(DATEPART(month, StartDate) AS char(2)) AS Month
       , CAST(DATEPART(year, StartDate) AS char(4)) AS Year
      from tbl
    ) t0
  ) t1
) t2

最初に、元の から年と月を取得しStartDateます。次に、それから月初の日付を作成します。次に、それに 1 か月を追加して、翌月の最初の月を取得します。次に、その新しい日付が > または < 前の日付であるかどうかを確認しEndDateます。2 つの日付のうち、小さい方の日付を使用します。次に、オリジナルと と の間のいずれか小さい方を使用して、StartDate総時間を決定します。TempDateEndDate

関連項目 EOMONTH: http://msdn.microsoft.com/en-us/library/hh213020.aspx

于 2013-02-27T13:57:21.250 に答える
0

最近、同様の問題を解決する必要がありました。これを支援するために、2 つの新しい関数を追加しました。

CREATE FUNCTION [dbo].[GREATESTDATE] 
(
    -- Add the parameters for the function here
    @Date1 DATETIME,
    @Date2 DATETIME
)
RETURNS DATETIME
AS
BEGIN


    IF (@Date1 < @Date2)
        RETURN @Date2
    ELSE 
        RETURN @Date1

END

と...

CREATE FUNCTION [dbo].[LEASTDATE] 
(
    -- Add the parameters for the function here
    @Date1 DATETIME,
    @Date2 DATETIME
)
RETURNS DATETIME
AS
BEGIN

    IF (@Date1 > @Date2)
        RETURN @Date2
    ELSE 
        RETURN @Date1

END

次に、次のように使用します。

DATEDIFF(D,dbo.GREATESTDATE(@StartDate1,@StartDate2),dbo.LEASTDATE(@EndDate1,@EndDate2))
于 2013-02-27T14:12:28.220 に答える
0

使用を検討してくださいDATEDIFF-これは、開始するのに役立ちます。

SELECT DATEDIFF(minute, starttime, endtime) 

http://msdn.microsoft.com/en-us/library/ms189794.aspx

開始月の最終日を取得するには、次を使用しますDATEADD

SELECT DATEADD(second,-1,DATEADD(month, DATEDIFF(month,0,starttime)+1,0))

SQL フィドルのデモ

于 2013-02-27T13:46:31.853 に答える