2011-10-07 48 views
11

Sử dụng PHP và MySQL. Trong bảng của tôi, có trường ngày (datetime) được ghi bởi hàm NOW() sql. Giá trị ví dụ của dữ liệu trong trường này là 2010-10-07 10:57:36. Làm thế nào tôi có thể chọn tất cả dữ liệu mà ngày-tháng-năm là ngày hôm nay. Tôi cố gắng sử dụng mã như sau:MySQL Làm cách nào để chọn dữ liệu từ bảng đã ghi ngày hôm nay?

SELECT * FROM table WHERE date=???? 

Trả lời

17

SELECT * FROM table where DATE(date)=CURDATE()

+1

Giải pháp của Kaivosukeltaja có thể tốt hơn từ điểm hiệu suất, mặc dù –

+1

Msg 195, Cấp 15, Tiểu bang 10, Dòng 6 'CURDATE' không phải là tên hàm được tích hợp sẵn. –

+1

'DATE' không phải là tên hàm được tích hợp sẵn. –

-2

sử dụng giữa.

select * from table date between '2010-10-06' and '2010-10-08'; 
+1

Uh..today có nghĩa là ngày người dùng mở trang của tôi, không phải 2010-10-08. Nhân tiện, cảm ơn denolk. –

26

Hãy thử điều này:

SELECT * FROM table WHERE date > CURDATE(); 

CURDATE() sẽ trở lại ngày hiện tại như 2011-10-07 sẽ được đúc để 2011-10-07 00:00:00 khi so sánh datetime s đến nó. Lưu ý rằng nếu bạn sử dụng DATE(date) = CURDATE(), bạn sẽ chạy chuyển đổi ngày cho mỗi hàng trong bảng, điều này sẽ thực sự tồi tệ cho hiệu suất của bạn nếu bạn có nhiều hàng và/hoặc bạn cần chạy truy vấn thường xuyên. Ngoài ra, hãy đảm bảo bạn có chỉ mục trên date, nếu không cả hai phương pháp sẽ thậm chí còn chậm hơn.

+0

dấu chấm phẩy có thể phá vỡ điều này nếu bạn đang chèn phía trên kết thúc truy vấn của mình –

+0

'CURDATE' không phải là tên hàm được tích hợp sẵn được công nhận. –

+0

@PradeepKumarPrabaharan: Điều đó không có vẻ giống như một lỗi MySQL. Có lẽ bạn đang chạy MSSQL? Thay vào đó hãy thử 'GETDATE()'. – Kaivosukeltaja

3
SELECT * FROM tableName WHERE DATE(fieldDate) = DATE(NOW()); 
2

Chức năng date_format phép bạn dễ dàng chuyển đổi giữa granularities khác nhau:

Chọn tất cả mọi thứ từ trong cùng một ngày:

select * from table 
where date_format(date, '%Y-%m-%d') = date_format(now(), '%Y-%m-%d'); 

Từ tháng cùng:

select * from table 
where date_format(date, '%Y-%m') = date_format(now(), '%Y-%m'); 

Từ năm giống nhau:

select * from table 
where date_format(date, '%Y') = date_format(now(), '%Y'); 

Từ giờ giống nhau:

select * from table 
where date_format(date, '%Y-%m-%d %H') = date_format(now(), '%Y-%m-%d %H'); 

và vân vân.

+0

'date_format' không phải là tên hàm được tích hợp sẵn. –

1

Hãy thử

SELECT * FROM table WHERE DATE(my_date)=DATE(now()) 

my_date -> column name 
+1

Điều này giống với câu trả lời được đưa ra cách đây 5 năm .. –

0

sử dụng một cái gì đó như thế này này nó chính xác hoạt động trên mã của tôi (cơ sở dữ liệu truy cập):

select * from Table t where t.column>=Date() and t.column< Date() + 1 
1
SET @day = '2017-12-12' ; 

SELECT * FROM table WHERE dateColumn BETWEEN DATE(@day) AND DATE_ADD(DATE(@day), INTERVAL 1 DAY) ; 
Các vấn đề liên quan