は、私はこれがないと思いますあなたが望むもの:
declare @t table (ID int not null,StartDate datetime not null,EndDate datetime not null,
Notes varchar(217) not null)
insert into @t(ID,StartDate,EndDate,Notes) values
(0,'2016-01-24T02:50:23','2016-02-05T08:00:05','somethingoranother'),
(2,'2016-01-30T22:00:00','2016-02-05T08:00:05','somethingoranother')
declare @Start datetime
declare @End datetime
select @Start = '20160101',@End='20160201'
;With Clamped as (
select
ID,
CASE WHEN StartDate > @Start THEN StartDate ELSE @Start END as StartDate,
CASE WHEN EndDate < @End THEN EndDate ELSE @End END as EndDate,
Notes
from
@t
where
StartDate < @End and
@Start < EndDate
)
select
*,
DATEDIFF(second,StartDate,EndDate) as ElapsedTime
from
Clamped
(@Start
と@End
はもちろんパラメータになります - これはサンプルコード用です)。
結果は:
ID StartDate EndDate Notes ElapsedTime
----------- ----------------------- ----------------------- ------------------- -----------
0 2016-01-24 02:50:23.000 2016-02-01 00:00:00.000 somethingoranother 680977
2 2016-01-30 22:00:00.000 2016-02-01 00:00:00.000 somethingoranother 93600
したがって、行0は26時間を貢献して189時間、9分、37分に寄与し、行2れます。私があなたの問題を理解していれば、それらの値は正しいと思われます。
最終的なクエリでこのデータを集計するかどうか、またはVB内でこれを行うかどうかは、あなた次第です。 TimeSpan
クラスを使用して、VBでやっていた何かのように時間、分、秒の単位で時間の訳を秒単位で残します。 (SQL Serverでは時間帯ではなく時間を表す対応するデータ型がないため、SQL Server内では簡単には実行できません)
2012年1月1日から31/01にレポートをプルすると/ 2016あなたはどの列を選択するのですか?なぜですか? – shadow
あなたの*入力*をこの仕事に説明し、あなたの*予想される*出力が何であるかを説明できれば助けになります。また、あなたはなぜ*最後の1秒の間に*真夜中前に起こることを除外したいのですか?通常、連続したデータ(datetimeのようなもの)の場合は、* <1/31/2016 23:59:59'の代わりに '<01/02/2016' - 一般に計算が簡単で、datetimeデータ型の精度が正しいかどうかを心配する必要はありません) –
私がやっていることは、制作時間を計算することです。時間と日付は非常に限定的でなければなりません。私の仕事は、何かが別の月にかけて実行されているときを除いて、私が得る全生産時間を得ることです。したがって、私は月末までにのみ計算したいと思います。 – someone13