- ベストアンサー
現在時刻(もしくは現在日)より、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)
- みんなの回答 (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 ------------------------------
その他の回答 (1)
- 原沢 信道(@nharasawa)
- ベストアンサー率53% (90/168)
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) で出来ると思います。
お礼
回答ありがとうございました。 REPLACE、ADDDATE、CURRENT等、知らない書き方がたくさんあったので、 勉強になりましたー
お礼
回答ありがとうございました。 こういう書き方もできるんですね。 参考になりましたー。