ホームページ > データベース > mysql チュートリアル > SQL Server で 2 つの日付の間のすべての日付を効率的に取得する方法

SQL Server で 2 つの日付の間のすべての日付を効率的に取得する方法

Barbara Streisand
リリース: 2025-01-12 10:13:43
オリジナル
719 人が閲覧しました

How to Efficiently Retrieve All Dates Between Two Dates in SQL Server?

SQL Server で 2 つの日付間のすべての日付を取得するためのトリック

SQL Server では、指定された日付範囲内のすべての日付を取得すると、データ分析、日付処理、レコード保存などのタスクに役立ちます。この記事では、指定された 2 つの日付間の連続する日付のシーケンスを効率的に取得するいくつかの方法を紹介します。

再帰共通テーブル式 (CTE) を使用する

1 つの方法は、再帰的 CTE を使用することです。例は次のとおりです:

<code class="language-sql">;with GetDates As
(
    select DATEADD(day,1,@maxDate) as TheDate
    UNION ALL
    select DATEADD(day,1, TheDate) from GetDates
    where TheDate < @minDate
)
select TheDate from GetDates</code>
ログイン後にコピー

ただし、この CTE は日付の選択には機能しますが、結果をカーソルに保存しようとするとコンパイル エラーが発生するため、困難になります。

代替方法

効率を高めて運用を簡素化するには、次の代替案を検討してください。

1. 日付テーブルを使用します

事前に日付テーブルを作成すると、クエリは非常に単純になります。

<code class="language-sql">DECLARE @MinDate DATE = '20140101',
        @MaxDate DATE = '20140106';

SELECT  Date
FROM    dbo.Calendar
WHERE   Date >= @MinDate
AND     Date <= @MaxDate;</code>
ログイン後にコピー

2. 日付テーブルを使用せずに日付シーケンスを生成します

日付テーブルがない場合は、次の手法を使用して日付シーケンスを動的に生成できます:

<code class="language-sql">DECLARE @MinDate DATE = '20140101',
        @MaxDate DATE = '20140106';

SELECT  TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1)
        Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)
FROM    sys.all_objects a
        CROSS JOIN sys.all_objects b;</code>
ログイン後にコピー

3. 日付の反復にカーソルを使用しないでください

一般に、日付の反復にカーソルを使用しないことをお勧めします。一般に、コレクションベースのアプローチはより効率的でスケーラブルです。たとえば、特定の日付の数量を取得したい場合は、次のクエリを使用できます:

<code class="language-sql">SELECT  TOP 1 date, it_cd, qty
FROM    T
WHERE   it_cd = 'i-1'
AND     Date = '20140101';</code>
ログイン後にコピー

カーソルの使用を回避し、これらの代替手法を活用することで、SQL Server で指定された範囲内のすべての日付を効率的に取得できます。

以上がSQL Server で 2 つの日付の間のすべての日付を効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート