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

タイムスタンプ列から現在の月のレコードmysqlを選択します

    更新

    日付の範囲についてデータをクエリするためのはるかに優れたインデックスフレンドリーな方法

    SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
      FROM table1
     WHERE timestampfield >= UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH)
       AND timestampfield <  UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY);
    

    注: 列データに関数を適用するのではなく、条件の右側で必要なすべての計算を実行します(これは定数であり、実行後に1回だけ評価されます)。このようにして、MySQLがtimestampfieldにある可能性のあるインデックスの恩恵を受けることができます。 列。

    元の回答:

    SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
      FROM table1
     WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE())
       AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE())
    

    注: このクエリは正しい結果を生成しますが、timestampfieldにある可能性のあるインデックスの適切な使用法を事実上無効にします。 列(MySQLがフルスキャンを実行するように強制されることを意味します)

    これがSQLFiddle です。 デモ



    1. 致命的なエラー:ブール値のメンバー関数bind_param()の呼び出し

    2. トラック因果関係を使用したクエリ実行の理解

    3. MySQLのカンマ区切り文字列を一時テーブルに分割

    4. MySQLでJSON_EXTRACTを使用して、引用符なしの文字列を取得するにはどうすればよいですか?