dポイントプレゼントキャンペーン実施中!

下記のように、時刻がカラムに分かれたテーブルがあるとき、
現在時刻(もしくは現在日)より、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)

A 回答 (2件)

DATEDIFF を使って現在日との差を取って、それが-7~0のものを取得する方法も有りますね。


http://dev.mysql.com/doc/refman/5.1/ja/date-and- …

例) ---------------------------
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
------------------------------
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/01/11 17:18

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)
で出来ると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

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

お礼日時:2012/01/11 17:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!