256

mysqlの現在の日時から30日を引くにはどうすればよいですか?

SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
4

8 に答える 8

369
SELECT * FROM table
WHERE exec_datetime BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add

于 2012-05-26T01:50:51.630 に答える
161

使用したくない人は、以下をDATE_SUB使用してCURRENT_DATEください。

SELECT CURRENT_DATE - INTERVAL 30 DAY
于 2014-10-24T14:47:45.083 に答える
27

NOW()クエリは毎回異なるため、クエリのキャッシュや最適化が失われるため、使用しないでください。MySQLのドキュメントで使用してはならない関数のリストを参照してください。

以下のコードでは、このテーブルが時間とともに成長していると仮定しましょう。新しいものが追加され、過去30日間のものだけを表示したいとします。これは最も一般的なケースです。

日付が文字列として追加されていることに注意してください。NOW()キャッシュを強制終了する関数を使用するよりも、呼び出し元のコードからこの方法で日付を追加することをお勧めします。

SELECT * FROM table WHERE exec_datetime >= DATE_SUB('2012-06-12', INTERVAL 30 DAY);

BETWEENこの秒からこの秒の30日前までのものが本当に必要な場合に使用できますが、これは私の経験では一般的なユースケースではないため、簡略化されたクエリが役立つことを願っています。

于 2012-05-26T01:53:49.117 に答える
27

MySQLは今から日を引きます:

select now(), now() - interval 1 day

プリント:

2014-10-08 09:00:56     2014-10-07 09:00:56

その他の間隔時間式単位の引数:

https://dev.mysql.com/doc/refman/5.5/en/expressions.html#temporal-intervals

select now() - interval 1 microsecond 
select now() - interval 1 second 
select now() - interval 1 minute 
select now() - interval 1 hour 
select now() - interval 1 day 
select now() - interval 1 week 
select now() - interval 1 month 
select now() - interval 1 year 
于 2014-10-08T13:04:03.123 に答える
20

使用することもできます

select CURDATE()-INTERVAL 30 DAY
于 2016-12-23T06:19:49.857 に答える
3
SELECT date_format(current_date - INTERVAL 50 DAY,'%d-%b-%Y')

SQLの日付形式を使用してフォーマットできます。

于 2016-05-31T06:31:46.680 に答える
1

時間ではなく日付のみが必要な場合は、次のようにします。

select*from table where exec_datetime
between subdate(curdate(), 30)and curdate();

curdate()時間コンポーネントが省略されているため、日付のみに関心がある場合よりも高速で、「意味的に正しい」可能性があります。now()

また、subdate()の2アリティの過負荷は、を使用するよりも潜在的に高速ですintervalinterval日以外のコンポーネントが必要な場合に使用することを目的としています。

于 2015-04-03T20:48:37.077 に答える
0

別の方法

SELECT COUNT(*) FROM tbl_debug WHERE TO_DAYS(`when`) < TO_DAYS(NOW())-30 ;
于 2014-11-18T15:36:34.850 に答える