ホームページ >データベース >mysql チュートリアル >SQL Server で指定された 2 つの日付の間の一連の日付を生成するにはどうすればよいですか?

SQL Server で指定された 2 つの日付の間の一連の日付を生成するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-15 09:07:43190ブラウズ

How to Generate a Series of Dates Between Two Given Dates in SQL Server?

SQL Server で日付範囲を生成します

SQL Server では、テーブル内の指定された 2 つの日付の間の日付範囲を設定するタスクは、いくつかの方法を使用して簡略化できます。効率的な方法は、数表または計数表を使用して一連の整数を生成することです。

'2011-09-01' から '2011-10-10' までの日付をテーブルに設定するリクエストに基づいて、次のソリューションを実装できます:

<code class="language-sql">DECLARE @StartDate DATE = '20110901'
, @EndDate DATE = '20111010'

SELECT  DATEADD(DAY, nbr - 1, @StartDate)
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS nbr
          FROM      sys.columns c
        ) nbrs
WHERE   nbr - 1 <= DATEDIFF(DAY, @StartDate, @EndDate)</code>

このコードは、1 から開始日と終了日の差までの整数のリストを生成します。各整数から 1 を引いて開始日に追加すると、「2011-09-01」で始まり「2011-10-10」で終わる日付のテーブルが生成されます。

あるいは、ゼロベースの計数テーブルを使用して計算を簡素化することもできます。

<code class="language-sql">CREATE TABLE [dbo].[nbrs](
    [nbr] [INT] NOT NULL
) ON [PRIMARY]

INSERT INTO dbo.nbrs (nbr)
SELECT nbr-1
FROM ( SELECT    ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS nbr
          FROM      sys.columns c
        ) nbrs

DECLARE @StartDate DATE = '20110901'
      , @EndDate DATE = '20111010'

SELECT  DATEADD(DAY, nbr, @StartDate)
FROM    nbrs
WHERE   nbr <= DATEDIFF(DAY, @StartDate, @EndDate)</code>

数値テーブルをデータベースに永続的に保存すると、将来のクエリで再利用できるため、サブクエリや再帰の必要がなくなり、パフォーマンスと効率が確保されます。

以上がSQL Server で指定された 2 つの日付の間の一連の日付を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。