2011-03-03 74 views
117

比今天等於或大於怎樣做以下的最佳方法:日期時間在MySQL

SELECT * FROM users WHERE created >= today; 

注:創建一個時間字段。

回答

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

但我認爲你的意思是created < today

+6

'CURDATE()'返回唯一的日期不是時間 – 2011-03-03 14:54:43

+3

否我的意思是= =但感謝CURDATE()是我所需要的! – n00b 2011-03-03 14:55:51

+13

@ n00b你如何擁有未來創建的用戶..?有趣的=)我用這個來查看帖子是否已經過期。 – 2014-03-18 03:52:45

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

如果該列是日期時間類型。

+1

今天我的意思是不是現在:d我需要像今天這樣不2011-03-03 2011-03-03 14點02分02秒 – n00b 2011-03-03 14:54:04

+0

@的n00b:它會返回行大於今天不要擔心,如果時間包括在內 – 2011-03-03 14:57:24

+2

讓我們說它是2011-02-02 14:02:02 - 創建於10:02:02的用戶將不會在您的版本中返回,即使它們是「今天」創建的:) – n00b 2011-03-03 15:02:01

2
SELECT * FROM users WHERE created >= now() 
57
SELECT * FROM myTable WHERE DATE(myDate) = DATE(NOW()) 

瞭解更多: http://www.tomjepson.co.uk/tutorials/36/mysql-select-where-date-today.html

+3

也許我錯過了一些東西,但對於DATETIME類型,CURDATE()解決方案不起作用。這樣做。 – Jahmic 2013-10-18 08:42:36

+0

加上這需要很多時間,因爲通過DATE()函數將DATETIME轉換爲日期開銷並隨後與where條件進行比較會產生開銷。 – roopunk 2014-08-14 09:48:03

12

如果 '創造' 爲datetime型

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

CURDATE ()也意味着'2013-05-09 00:00:00'

+0

非常感謝。我實際上需要DATE_SUB(以相同的方式使用),但這使我走上了正確的道路。 – 2015-11-05 12:29:50

-4

您可以返回所有行,並在if語句中使用php datediff函數,但這會給服務器帶來額外的負載。

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

與數據庫選擇相比,這是非常慢的 – IgniteCoders 2015-05-26 09:10:24

-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 [ 「05/11/2011」]

+0

這是一個非常原始的解決方案 – IgniteCoders 2015-05-26 09:07:56

0

下面的代碼爲我工作。

declare @Today date 

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

Select * 

FROM table_name 
WHERE created <= @Today 
0

如果列有索引和功能應用上列,然後指數不工作,發生全表掃描,從而導致很慢的查詢。

要使用索引並比較datetime與今天/當前日期,可以使用以下內容。

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