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

PHPとMySQL:月と日を動的な年と比較する

    MySQLのdate_formatを使用できます 日付を確認するときに機能します。

    例:

    select date_format('2016-05-18', '%m%d');
    +-----------------------------------+
    | date_format('2016-05-18', '%m%d') |
    +-----------------------------------+
    | 0518                              |
    +-----------------------------------+
    1 row in set (0,01 sec)
    

    したがって、簡単な間隔で確認できます。今日は0518 2月2日から5月31日まで:

    完全な例:

    desc mytable;
    +-----------+---------+------+-----+---------+-------+
    | Field     | Type    | Null | Key | Default | Extra |
    +-----------+---------+------+-----+---------+-------+
    | date_from | char(4) | YES  |     | NULL    |       |
    | date_to   | char(4) | YES  |     | NULL    |       |
    | price     | int(11) | YES  |     | NULL    |       |
    +-----------+---------+------+-----+---------+-------+
    3 rows in set (0,00 sec)
    
    select * from mytable;
    +-----------+---------+-------+
    | date_from | date_to | price |
    +-----------+---------+-------+
    | 0901      | 0930    |   100 |
    | 1001      | 0201    |    80 |
    | 0202      | 0531    |   100 |
    | 0601      | 0701    |   120 |
    +-----------+---------+-------+
    4 rows in set (0,00 sec)
    

    サンプルクエリ:

    select price, date_from, date_to from mytable where date_format(now(), '%m%d') between date_from and date_to;
    +-------+-----------+---------+
    | price | date_from | date_to |
    +-------+-----------+---------+
    |   100 | 0202      | 0531    |
    +-------+-----------+---------+
    1 row in set (0,01 sec)
    

    編集

    @FelipeDuarteの回答に対するコメントを読んでください...10/01(10月1日)から02/01(2月1日)までの期間は、新年を考慮する必要があります...

    期間を10/01から12/31と01/01から02/01の2つに分割することでチートできます



    1. aioMySQLがPythonに接続していません

    2. 選択した結果をOracleで転置する

    3. 変数を使用してmysqlでOUTFILEを指定できますか

    4. mysqlテーブルから個別のレコードを取得する方法は?