• ベストアンサー

現在時刻(もしくは現在日)より、7日以内のレコード

下記のように、時刻がカラムに分かれたテーブルがあるとき、 現在時刻(もしくは現在日)より、7日以内のレコードだけを取得したいのですが、 どう書けば良いのでしょうか? カラム1 カラム2 min hou day mon yea 内容1  内容2  0  4  6  1  2012 内容3  内容4  3  2  1  5  2011 内容5  内容6  1  3  4  2  2011 ビューとかを使うのでしょうか? それとも一旦全部取り出した後、スクリプト(PHP)で何とかするのでしょうか? 一番知りたいのは、具体的なSQL文なのですが… <環境> MySQL5 時刻関係カラムの属性は全て、UNSIGNEDでデフォルト値0 min tinyint(3) hou tinyint(3) day tinyint(3) mon tinyint(3) yea smallint(5)

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

DATEDIFF を使って現在日との差を取って、それが-7~0のものを取得する方法も有りますね。 http://dev.mysql.com/doc/refman/5.1/ja/date-and-time-functions.html#id643167 例) --------------------------- SELECT * FROM table_a WHERE DATEDIFF( STR_TO_DATE(CONCAT(yea, '/', mon, '/', day), '%Y/%c/%e'), CURRENT_DATE ) between -7 AND 0 ------------------------------ 現在日の前後7日以内でしたら、絶対値が7以下になりますね。 例) --------------------------- SELECT * FROM table_a WHERE ABS(DATEDIFF( STR_TO_DATE(CONCAT(yea, '/', mon, '/', day), '%Y/%c/%e'), CURRENT_DATE )) <= 7 ------------------------------

re999
質問者

お礼

回答ありがとうございました。 こういう書き方もできるんですね。 参考になりましたー。

その他の回答 (1)

回答No.1

SELECT * FROM テーブル名 WHERE CONCAT(CAST(yea AS CHAR(4)) ,CASE WHEN mon < 10 THEN '0' ELSE '' END ,CAST(mon AS CHAR(2)) ,CASE WHEN day < 10 THEN '0' ELSE '' END ,CAST(day AS CHAR(2))) >=LEFT(REPLACE(ADDDATE(CURRENT_DATE,-7),'-',''),8) で出来ると思います。

re999
質問者

お礼

回答ありがとうございました。 REPLACE、ADDDATE、CURRENT等、知らない書き方がたくさんあったので、 勉強になりましたー