2010-06-25 41 views
23

Tôi có bảng Lịch sự kiện và tôi muốn chọn các sự kiện có ngày bằng hoặc lớn hơn ngày hôm nay. Khi tôi sử dụng câu lệnh SELECT sau, nó chỉ truy xuất các sự kiện trong tương lai (> NGAY BÂY GIỜ()):Chọn mục nhập theo ngày -> = NGAY BÂY GIỜ(), MySQL

<?php  
$db->query("SELECT * FROM events WHERE event_date >= NOW()"); 
?> 

Làm cách nào để chọn tất cả các sự kiện hôm nay hoặc trong tương lai?

Cảm ơn bạn

Trả lời

36

Bạn đang tìm kiếm CURDATE():

$db->query("SELECT * FROM events WHERE event_date >= CURDATE()"); 

Hoặc:

$db->query("SELECT * FROM events WHERE event_date >= CURRENT_DATE()"); 
+0

Cảm ơn! Làm việc như một sự quyến rũ – NightMICU

+0

@NightMICU: Điều đó thật tuyệt :) – Sarfraz

+0

Câu trả lời hay nhưng thời gian kiểm tra của nó và không hẹn hò! –

1

Nếu bạn chỉ quan tâm đến ngày, không thời gian, sử dụng CURDATE() thay vì NOW().

Tất nhiên bạn có thể sử dụng từ đồng nghĩa CURRENT_DATE (có hoặc không có dấu ngoặc đơn sau đó), nhưng tài liệu tôi đã chỉ định cung cấp cho CURDATE làm cách viết chính tả đầu tiên ;-).

0

Vấn đề của bạn bây giờ() rất chính xác. Vì vậy, ngày cho ngày hôm nay và trước bây giờ bởi vì họ bắt đầu vào đầu ngày.

Sử dụng này:

select * from events where datediff(event_date, now()) >= 0; 
12

Lý do mà truy vấn này:

SELECT * FROM events WHERE event_date >= NOW() 

... trả hồ sơ từ tương lai, là vì NOW() bao gồm thời gian cũng như ngày. Và phần thời gian đó cho biết thời gian mà tại đó câu lệnh [chức năng hoặc kích hoạt] bắt đầu thực hiện. Vì vậy, điều đó có nghĩa là ngày bắt đầu trong ngày trong kiểu dữ liệu DATETIME trông giống như: 2010-06-24 00:00:00 (YYYY-MM-DD HH: MM: SS, đến độ chính xác micro giây), NOW() sẽ hiển thị một cái gì đó như 2010-06-24 14:24:31 ...

Dưới đây là lựa chọn của bạn:

SELECT * FROM events WHERE event_date >= DATE(NOW()) 
SELECT * FROM events WHERE event_date >= DATE(CURRENT_TIMESTAMP) 
SELECT * FROM events WHERE event_date >= CURRENT_DATE() 
SELECT * FROM events WHERE event_date >= CURRDATE() 
+0

Trả lời rất sâu, cảm ơn bạn! Rất hữu ích cho tương lai – NightMICU

2

bạn cũng có thể làm

<?php  
$db->query("SELECT * FROM events WHERE UNIX_TIMESTAMP(event_date) >=  UNIX_TIMESTAMP(NOW())"); 
?> 

Đó là chính xác hơn bằng CURTIME() nếu bởi bất kỳ cơ hội của bạn sử dụng thời gian cũng như ngày

0

Đây là sự khác biệt giữa CURDATE và VỚI DOANH NGHIỆP:

mysql> select CURDATE(); 
+------------+ 
| CURDATE() | 
+------------+ 
| 2017-03-17 | 
+------------+ 
1 row in set (0.03 sec) 

mysql> select NOW(); 
+---------------------+ 
| NOW()    | 
+---------------------+ 
| 2017-03-17 09:04:45 | 
+---------------------+ 
1 row in set (0.00 sec) 

tôi luôn luôn sử dụng VỚI DOANH NGHIỆP chỉ để được chính xác

Các vấn đề liên quan