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

TSQLで日付をインクリメントする結果セットを生成する

    日付の間隔が2047日以内の場合:

    declare @dt datetime, @dtEnd datetime
    set @dt = getdate()
    set @dtEnd = dateadd(day, 100, @dt)
    
    select dateadd(day, number, @dt)
    from 
        (select number from master.dbo.spt_values
         where [type] = 'P'
        ) n
    where dateadd(day, number, @dt) < @dtEnd
    

    いくつかのリクエストがあった後、回答を更新しました。なぜですか?

    元の回答にはサブクエリが含まれていました

     select distinct number from master.dbo.spt_values
         where name is null
    

    これは、SQL Server 2008、2012、および2016でテストしたのと同じ結果をもたらします。

    ただし、spt_valuesからクエリを実行するときに、MSSQLが内部的に使用するコードを分析しようとしたため 、SELECT ステートメントには常に句WHERE [type]='[magic code]'が含まれます 。

    したがって、クエリは正しい結果を返しますが、間違った理由で正しい結果を提供することにしました。

    別の[type]を定義するSQLServerの将来のバージョンが存在する可能性があります NULLも含む値 [name]の値として 、0〜2047の範囲外、または連続していない場合でも、結果は単純に間違っています。



    1. MySQLiプリペアドステートメントエラーレポート

    2. CASE ..OracleSQLのWHEN式

    3. MySQLサーバーを起動、再起動、ステータスを確認、および停止する方法

    4. MariaDBでのRTRIM()のしくみ