2010-06-08 31 views
10

Làm cách nào để tôi có thể nhận bản ghi từ bảng của mình sử dụng tháng/năm? Tôi có một bảng như thế này:Chọn theo tháng của một trường

Name - varchar 
DueDate -datetime 
Status -boll 

DueDate là dự án đúng hạn, tôi muốn ghi tương ứng với tháng/năm, không đầy đủ ngày, tôi có nghĩa là kỷ lục trong tháng cụ thể.

Tôi làm cách nào để thực hiện điều này trong mysql?

+0

dường như mọi người khác nhanh hơn tôi khi gõ! – espais

Trả lời

35

Đơn giản chỉ cần sử dụng MONTH()YEAR():

SELECT * FROM Project WHERE MONTH(DueDate) = 1 AND YEAR(DueDate) = 2010 
+5

Điều này sẽ không sử dụng chỉ mục nếu có tồn tại trên cột 'duedate'. Câu trả lời của Todd R là lựa chọn tốt nhất. –

+0

Rất hữu ích, cảm ơn bạn! – tribulant

3
SELECT Name FROM Table Where MONTH(datetime) = 1; 

1 = tháng 1.

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_month

+0

nếu ngày là "1 tháng 1 năm 2010" và "2 tháng 1 năm 2009". theo truy vấn của bạn nó sẽ tìm thấy cả hai – Salil

+0

Hmmm .. Chắc chắn ông có thể hiểu rằng ông có thể sử dụng NĂM, im không phải ở đây để cho anh ta câu trả lời nhưng để hướng dẫn anh ta. tôi đã cung cấp tài liệu hướng dẫn cho hàm MONTH(), tôi chắc chắn rằng anh ta sẽ tìm YEAR(), DAY() và HOUR() :) – RobertPitt

+0

Điều này sẽ không sử dụng chỉ mục nếu có tồn tại trên cột 'duedate'. Câu trả lời của Todd R là lựa chọn tốt nhất. –

1
SELECT * WHERE MONTH(DueDate) = '5' AND YEAR(DueDate) = '1987'; 
19

Bạn có thể sử dụng một giữa tuyên bố:

select * from Project 
    where DueDate between '2010-01-01' and '2010-02-01' 
+6

+1: Điều này sẽ sử dụng chỉ mục nếu có tồn tại trên cột 'duedate'; các câu trả lời bằng cách sử dụng các hàm MONTH & YEAR sẽ không. –

3

nó sẽ chọn năm nay tháng cụ thể

SELECT * FROM Project WHERE MONTH(DueDate) = 1 AND YEAR(DueDate) = YEAR(NOW()) 
4

Không sử dụng giải pháp được đề xuất ở đây với MONTH()YEAR(). Nó ngăn MySQL sử dụng chỉ mục trên cột DueDate nếu bạn có một và nó buộc MySQL kiểm tra tất cả các hàng trong bảng.

Thay vào đó, sử dụng BETWEEN khoản như thế này:

SELECT * FROM Project 
WHERE DueDate BETWEEN '2010-01-01' AND '2010-02-01' 

Hoặc một giải pháp quy định tại khoản IN:

SELECT * FROM Project 
WHERE DueDate IN ('2010-01-01', '2010-01-02', '2010-01-03', ..., '2010-01-31') 

này hai giải pháp cho phép MySQL sử dụng chỉ số, vì vậy hiệu suất sẽ được tốt hơn.

+3

Thứ hai chỉ là vô dụng. Ai sẽ muốn cung cấp 31 ngày thay vì 2? –

+0

Mọi chức năng đều có công dụng của nó. Có thể ai đó cần chọn từ danh sách ngày. – GeneCode

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