sql >> データベース >  >> RDS >> Sqlserver

月/年のテーブルを生成するためのより良い方法

    高価な再帰CTEよりもはるかに効率的であることが多いため、既存のセットを使用することを好みます。数値テーブルがある場合は、それを使用してください。すでにカレンダーテーブルがある場合は、さらに良いでしょう。それ以外の場合は、master.dbo.spt_valuesなどの組み込みオブジェクトを使用できます :

    DECLARE @FromDate DATETIME, @ToDate DATETIME;
    SET @FromDate = '2012-01-01';
    SET @ToDate = '2012-12-31';
    
    -- all days in that period
    SELECT TOP (DATEDIFF(DAY, @FromDate, @ToDate)+1) 
      TheDate = DATEADD(DAY, number, @FromDate)
      FROM [master].dbo.spt_values 
      WHERE [type] = N'P' ORDER BY number;
    
    -- just the months in that period
    SELECT TOP (DATEDIFF(MONTH, @FromDate, @ToDate)+1) 
      TheDate  = DATEADD(MONTH, number, @FromDate),
      TheMonth = MONTH(DATEADD(MONTH, number, @FromDate)),
      TheYear  = YEAR(DATEADD(MONTH, number, @FromDate))
      FROM [master].dbo.spt_values 
      WHERE [type] = N'P' ORDER BY number;
    

    背景については、以下を参照してください:




    1. SQL Server Compact EditionでASP.NETメンバーシップを使用できますか?

    2. フィールドの連結を行うためのトリガーを作成する方法

    3. RailsはどのようにMySQLステートメントを作成しますか?

    4. PHPからMySQLに挿入する(jQuery / AJAX)