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

日付範囲から日を生成する

    このソリューションは、ループ、プロシージャ、または一時テーブルを使用しません 。サブクエリは過去10,000日間の日付を生成し、必要に応じて前後に拡張できます。

    select a.Date 
    from (
        select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY as Date
        from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
        cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
        cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
        cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as d
    ) a
    where a.Date between '2010-01-20' and '2010-01-24' 
    

    出力:

    Date
    ----------
    2010-01-24
    2010-01-23
    2010-01-22
    2010-01-21
    2010-01-20
    

    パフォーマンスに関する注意事項

    こちら でテストしてください 、パフォーマンスは驚くほど良好です。上記のクエリには0.0009秒かかります。

    サブクエリを拡張して約を生成するとします。 100,000の数字(したがって、約274年分の日付)、0.0458秒で実行されます。

    ちなみに、これは非常に移植性の高い手法であり、ほとんどのデータベースでわずかな調整で機能します。

    1、000日を返すSQLフィドルの例



    1. MySQLで列の名前を変更します

    2. Oracleスキーマ(スクリプト可能)のDDL全体を生成するにはどうすればよいですか?

    3. MySQLで値に少なくとも1桁の数字が含まれているかどうかを検出する方法

    4. R12.2EbuisnessSuiteの管理スクリプト