2012-03-30 73 views
24

Tôi có một câu hỏi nhanh. Tôi có một db một bảng kiểm toán với một cột datetime trong đó. (ví dụ: 2012-03-27 00:00:00) và tôi đang xây dựng một truy vấn mySQL để trả về một tập hợp các hàng nếu ngày tháng nằm trong khoảng giữa hai ngày mà tôi đưa ra.phạm vi ngày giờ mySQL Truy vấn Vấn đề

cho đến nay câu hỏi của tôi trông như thế này:

SELECT * FROM util_audit WHERE DATED >= DATE(03/15/2012) AND DATED <= DATE(03/31/2012); 

nếu tôi chỉ sử dụng

SELECT * FROM util_audit WHERE DATED >= DATE(03/15/2012); 

Nó sẽ trả lại toàn bộ hồ sơ của tôi bởi vì họ đã ngày trong tuần này.

Tôi cũng đã cố gắng này:

SELECT * FROM util_audit WHERE DATED >= '02/15/2012 00:00:00' AND DATED <= '03/31/2012 00:00:00'; 

và không có gì! Nó sẽ trả về hàng không, khi tôi biết tôi có tất cả chúng từ ngày 27 tháng này đến hôm nay. Am i thiếu cái gì ở đây? tại sao nó hoạt động một mình, nhưng không phải khi tôi thêm ngày thứ hai?

Trả lời

44

Hãy thử:

SELECT * FROM util_audit WHERE `DATED` BETWEEN "2012-03-15" AND "2012-03-31"; 
+1

Làm việc này, Cảm ơn bạn đã trả lời nhanh! – Myy

+3

Điều gì sẽ xảy ra khi bạn có nhiều tiêu chí tìm kiếm hơn (ví dụ SELECT * FROM util_audit WHERE 'DATED' GIỮA" 2012-03-15 "VÀ" 2012-03-31 "VÀ booLive = 1)? Vì tôi gặp lỗi. – khany

+1

Tôi không thể tạo lại lỗi đó, nhưng trong mọi trường hợp, bạn luôn có thể sử dụng dấu ngoặc đơn để làm rõ, ví dụ: 'SELECT * FROM util_audit WHERE (GIỮ GIỮA" 2012-03-15 "VÀ" 2012-03-31 ") VÀ booLive = 1;' –

6

Theo như tôi biết, ngày tháng trong MySql được đại diện với các định dạng yyyy-MM-dd hh:mm:ss do đó bạn cần phải làm điều này:

SELECT * FROM util_audit 
WHERE DATED >= '2012-02-15 00:00:00' AND DATED <= '2012-03-31 00:00:00'; 

Hoặc thậm chí tốt hơn:

SELECT * FROM util_audit 
WHERE DATED BETWEEN '2012-02-15 00:00:00' AND '2012-03-31 00:00:00'; 
+0

những phương pháp này cũng hoạt động, cảm ơn! – Myy

9

Có một vài trường hợp cạnh cần được xem tại đây bằng cách sử dụng ngày kết thúc chính xác, nếu không mục vào ngày 31 sẽ được bỏ qua:

SELECT * FROM util_audit 
WHERE DATED >= '2012-02-15 00:00:00' AND DATED <= '2012-03-31 23:59:59'; 

SELECT * FROM util_audit 
WHERE DATED BETWEEN '2012-02-15 00:00:00' AND '2012-03-31 23:59:59'; 

Hoặc bạn có thể đẩy ngày kết thúc về phía trước và sử dụng:

SELECT * FROM util_audit 
WHERE DATED >= '2012-02-15 00:00:00' AND DATED < '2012-04-01'; 

SELECT * FROM util_audit 
WHERE DATED BETWEEN '2012-02-15 00:00:00' AND '2012-04-01'; 

Chỉ cần đi qua này bản thân mình rất hy vọng nó sẽ giúp nếu người khác tìm thấy trang này.

+1

Tôi vô tình bỏ phiếu cho câu hỏi này. Đây là định dạng ngày tôi đã sử dụng! Vì vậy, đã chỉnh sửa, đảo ngược phiếu bầu của tôi và xóa bản chỉnh sửa. Xin lỗi vì chuyện đó. – Quaternion

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