開始日と終了日、そして別の開始日と終了日を持つ場合、日付範囲内の各日の時間範囲を返すようにします。日付範囲と時間範囲を、日付範囲に含まれる各日の時間範囲を含む一連の結果に結合するSQL
column1
2017-08-23 07:00:00.000
2017-08-23 07:10:00.000
2017-08-23 07:20:00.000
2017-08-23 07:30:00.000
2017-08-24 07:00:00.000
2017-08-24 07:10:00.000
2017-08-24 07:20:00.000
....
等...ゴマ:
ここで小さな例だ: 私は、次の変数は、以下のサンプルの値に設定されている:
declare @StartDate date
declare @EndDate date
declare @StartTime time
declare @EndTime time
declare @interval int = 10
set @StartDate = '2017-08-23'
set @EndDate = '2017-08-25'
set @StartTime = '07:00:00'
set @EndTime = '07:30:00'
私は返すしたいことは以下のとおりです。最終日時の値。
私はこの解決策(いくつかの人々に役立つかもしれません)を考え出しましたが、同じ結果を達成するためのよりエレガントな方法が必要であると感じています。私は、クエリ内の他のすべてと一緒に3つのCTEは、それがあまりにもかさばる作ることを心配しています
;
WITH DateCTE
AS(
Select @StartDate as StartDate
UNION ALL
SELECT DATEADD(DAY,1,StartDate)
FROM DateCTE
WHERE DATEADD(DAY,1,StartDate) <= @EndDate
)
, TimeCTE
AS(
Select @StartTime as StartTime
UNION ALL
SELECT DATEADD(MINUTE,@interval,StartTime)
FROM TimeCTE
WHERE DATEADD(MINUTE,@interval,StartTime) <= @EndTime
)
, DateTimeCTE
as (
select StartDate, StartTime from DateCTE
cross join TimeCTE
)
SELECT CONVERT(DATETIME, CONVERT(CHAR(8), StartDate, 112)
+ ' ' + CONVERT(CHAR(8), StartTime, 108)) as 'datetime'
FROM DateTimeCTE
order by StartDate asc
,StartTime asc
;
:
は、ここに私のソリューションです。私はこれに心配する権利があるのですか、あるいは私はちょうど編集的であるのですか? :)
いずれにしても、誰かがクリーナーソリューションを知っていれば、私は本当にそれを見ることに興味があります。
もう一度おねがいします!
これは動作するコードであり、SOではなくCodeReviewに掲載する必要があります。 –
使用しているdbmsにタグを付けます。そのコードは製品固有です。 – jarlh
この質問はcodereview.stackexchange.comに属しています – scsimon