MySQLの今日と同じかそれ以上の日時


175

以下を行うための最良の方法は何ですか:

SELECT * FROM users WHERE created >= today;

注:作成されるのは日時フィールドです。

回答:


329
SELECT * FROM users WHERE created >= CURDATE();

しかし、私はあなたが意味すると思います created < today


11
CURDATE()時間ではなく日付のみを返す
Shakti Singh

20
@ n00b将来作成されるユーザーはどのようにしていますか?興味深い=)私はこれを使用して、投稿の期限がまだ切れていないかどうかを確認していました。
Garet Claborn 2014年

75
SELECT * FROM myTable WHERE  DATE(myDate) = DATE(NOW())

続きを読む:http : //www.tomjepson.co.uk/tutorials/36/mysql-select-where-date-today.html


6
何か足りないかもしれませんが、DATETIME型では、CURDATE()ソリューションは機能しません。これはします。
2013年

さらに、DATE()関数を使用してDATETIMEを日付に変換し、where条件と比較するオーバーヘッドがあるため、これには多くの時間がかかります。
roopunk

列に対して関数を使用しないでください。クエリがインデックスを無視するようになり、クエリが遅くなります。別のアプローチのために私の答えをチェックstackoverflow.com/a/42365426/4311336
Bsienn

33
SELECT * FROM users WHERE created >= NOW();

列が日時タイプの場合。


1
私は今日ではないという意味です:D 2011-03-03のように今日は必要ありません2011-03-03ではない14:02:02
n00b

@ n00b:今日よりも大きい行を返します。時間が含まれていても問題ありません
Shakti Singh

3
それが2011-02-02 14:02:02であるとしましょう-10:02:02に作成されたユーザーは、「今日」作成されたとしても、バージョンには返されません:)
n00b

@ n00b:Lol ya、時間を止めることができさえすれば、ユーザーは二度と戻されないでしょう。
Mike Purcell

15

「作成」が日時タイプの場合

SELECT * FROM users WHERE created < DATE_ADD(CURDATE(), INTERVAL 1 DAY);

CURDATE()は「2013-05-09 00:00:00」も意味します


これをありがとう。実際にはDATE_SUB(同じ方法で使用)が必要でしたが、これにより正しい道が開かれました。
Daniel Price

これにより、日付に0が含まれるデータは返されません。つまり、「2013-05-09 00:00:00」は失われます
Bsienn

8

マークされた回答は誤解を招くものです。述べられた質問はですがDateTime、必要なものはちょうどだったと述べましたCURDATE()

これに対する最も短くて正しい答えは次のとおりです。

SELECT * FROM users WHERE created >= CURRENT_TIMESTAMP;

5

列にインデックスがあり、その列に関数が適用されている場合、インデックスが機能せず、テーブル全体のスキャンが発生し、クエリが非常に遅くなります。

インデックスを使用して日時を比較するにはを今日/現在の日付には、以下を使用できます。

OPのソリューション:

select * from users
where created > CONCAT(CURDATE(), ' 23:59:59')

今日のデータを取得するサンプル:

select * from users
where 
    created >= CONCAT(CURDATE(), ' 00:00:00') AND
    created <= CONCAT(CURDATE(), ' 23:59:59')

または略してBETWEENを使用します

select * from users 
where created BETWEEN 
      CONCAT(CURDATE(), ' 00:00:00') AND CONCAT(CURDATE(), ' 23:59:59')

2
SELECT * FROM users WHERE created >= now()

今日からこの瞬間までのレコードは返されません。
gsziszi

0

以下のコードは私のために働きました。

declare @Today date

Set @Today=getdate() --date will equal today    

Select *

FROM table_name
WHERE created <= @Today

-1
SELECT * FROM table_name WHERE CONCAT( SUBSTRING(json_date, 11, 4 ) ,  '-', SUBSTRING( json_date, 7, 2 ) ,  '-', SUBSTRING(json_date, 3, 2 ) ) >= NOW();

json_date ["2011年5月11日"]


これは非常に未加工のソリューションです
IgniteCoders '26年

-5

すべての行を返し、ifステートメント内でphp datediff関数を使用できますが、サーバーに余分な負荷がかかります。

if(dateDiff(date("Y/m/d"), $row['date']) <=0 ){    
}else{    
echo " info here";    
}

4
これはデータベースの選択と比較して非常に遅い
IgniteCoders '26年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.