MySQLクエリ-今日から過去30日間のレコード


122

過去30日以内にデータベースに追加されたすべてのレコードを返したいのですが。表示目的のため、日付をmm / dd / yyに変換する必要があります。

create_date between DATE_FORMAT(curdate(),'%m/%d/%Y') AND (DATE_FORMAT(curdate() - interval 30 day,'%m/%d/%Y')) 

私のステートメントでは、レコードを過去30日間に制限できません。すべてのレコードが選択されます。

誰かが私を正しい方向に向けることができますか?近くにいるような気がします。

ありがとう、そして素晴らしい週を。

回答:


292

あなたは適用する必要がDATE_FORMATSELECT句、ないWHERE句:

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM    mytable
WHERE   create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()

また、日付CURDATE()DATE一部のみが返されるため、時刻の部分を入力してcreate_dateとして保存した場合DATETIME、このクエリは今日のレコードを選択しません。

この場合、NOW代わりに使用する必要があります:

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM    mytable
WHERE   create_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW()

この回答の2番目の部分は非常に重要です。私はその問題を抱えているかもしれないし、抱えていなかったかもしれず、この答えに戻るまで頭を悩ませていました。
タイラーレイゼンビー

@Quassnoiごめんなさい。これはWordPress \ wpdb prepare問題のみのようです。またすみません。
VEE

56
SELECT
    *
FROM
    < table_name >
WHERE
    < date_field > BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY)
AND NOW();

2
私は)(CURDATE BETWEENにこの方法を好む- INTERVAL 30
ダン・

1
@Ermだから、なぜかわかりますか?
スリム

3
私はうそをつくことはありません-それは2年前のことであり、思い出せません!申し訳ありません:P
Dan

1
使用する必要はありませんDATE_FORMAT(create_date, '%m/%d/%Y')
kazy

@Dan私は、括弧の前の日付を囲むことで、それをより読みやすくすることを好む: ... WHERE create_date BETWEEN (NOW() - INTERVAL 30 DAY) AND NOW()
クリス・クレイグ

10

DATE_FORMAT文字列を返すので、BETWEEN句で2つの文字列を使用していますが、期待どおりに機能しません。

代わりに、日付をの形式に変換し、実際の日付に対してSELECTを実行しBETWEENます。例えば、

SELECT DATE_FORMAT(create_date, '%m/%d/%y') as create_date_formatted
FROM table
WHERE create_date BETWEEN (CURDATE() - INTERVAL 30 DAY) AND CURDATE()

9

これをmysqlで書くこともできます-

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM    mytable
WHERE   create_date < DATE_ADD(NOW(), INTERVAL -1 MONTH);

修繕


2
注意:賛成投票にもかかわらず、これにより過去 30日間ではなく、次の 30日/月の日付が選択されます!
JonBrave 2018年

4
同意する必要があります。WHEREcreate_date> DATE_ADD(NOW()、INTERVAL -1 MONTH);
Bhavik P.

6

現在の日付のアクティビティと過去30日間の完全なアクティビティの場合、これを使用します。SYSDATEは1日で変動するため、前の30日にはその日のデータ全体が含まれないためです。

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND SYSDATE()

1

ここでは使用しないソリューションですcurdate()機能は、これは使う人のためのソリューションですTSQL私が推測するには、

SELECT myDate
FROM myTable
WHERE myDate BETWEEN DATEADD(DAY, -30, GETDATE()) AND GETDATE()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.