2012-05-07 32 views
42

Trong câu lệnh SQL, làm cách nào để so sánh ngày được lưu dưới dạng TIMESTAMP với ngày ở định dạng YYYY-MM-DD?Làm thế nào để so sánh các dấu thời gian với tham số chỉ ngày tháng trong MySQL?

Ex .: SELECT * FROM table WHERE timestamp = '2012-05-05'

Tôi muốn truy vấn này trả về tất cả các hàng có dấu thời gian trong ngày theo quy định, nhưng nó sẽ chỉ trả lại hàng có nửa đêm dấu thời gian.

nhờ

Trả lời

82

Bạn có thể sử dụng DATE() chức năng để trích xuất các phần ngày của timestamp:

SELECT * FROM table 
WHERE DATE(timestamp) = '2012-05-05' 

Mặc dù, nếu bạn có một chỉ mục trên cột timestamp, đây sẽ là nhanh hơn bởi vì nó có thể sử dụng các chỉ số:

SELECT * FROM table 
WHERE timestamp BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59' 
+0

Loại hiệu suất nào tốt hơn? –

1

Sử dụng một chức năng chuyển đổi của MYSQL:

SELECT * FROM table WHERE DATE(timestamp) = '2012-05-05' 

này nên làm việc

3
WHERE cast(timestamp as date) = '2012-05-05' 
3
SELECT * FROM table WHERE timestamp >= '2012-05-05 00:00:00' 
    AND timestamp <= '2012-05-05 23:59:59' 
0

Trong trường hợp bạn đang sử dụng các tham số SQL để chạy các truy vấn thì đây sẽ là hữu ích

SELECT * FROM table WHERE timestamp between concat(date(?), ' ', '00:00:00') and concat(date(?), ' ', '23:59:59') 
1
Use 

SELECT * FROM table WHERE DATE(2012-05-05 00:00:00) = '2012-05-05' 
0

Khi tôi đọc câu hỏi của bạn, Tôi nghĩ bạn đã ở trên Oracle DB cho đến khi tôi thấy thẻ 'MySQL'. Dù sao, đối với những người làm việc với Oracle ở đây là cách:

SELECT * 
FROM table 
where timestamp = to_timestamp('21.08.2017 09:31:57', 'dd-mm-yyyy hh24:mi:ss'); 
Các vấn đề liên quan