web-dev-qa-db-ja.com

MySQLクエリ-今日から過去30日間の記録

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

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

私のステートメントは、過去30日間のレコードの制限に失敗しました-すべてのレコードを選択します。

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

ありがとう、素晴らしい一週間を。

108
Jason Sweet

SELECT句ではなく、WHERE句にDATE_FORMATを適用する必要があります。

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

CURDATE()は日付のDATE部分のみを返すため、create_dateDATETIMEとして格納し、時間部分を埋めると、このクエリは今日の日付を選択しません記録。

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

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM    mytable
WHERE   create_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
254
Quassnoi
SELECT
    *
FROM
    < table_name >
WHERE
    < date_field > BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY)
AND NOW();
53
Thinkcast

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()
10
Rich Adams

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

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

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

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

これはcurdate()関数を使用しないソリューションです。これはTSQLを使用するユーザー向けのソリューションです

SELECT myDate
FROM myTable
WHERE myDate BETWEEN DATEADD(DAY, -30, GETDATE()) AND GETDATE()
1
mvirant