2012-03-05 49 views
1

這是我Student如何選擇,如果日期列是當年爲同一

Id(int) | Name(varchar) | registerDate(Date) 
1   John   2012-01-01 

我怎樣才能寫出相應的查詢,以檢查人的registerDate值是當前一年相同(2012年)?

+5

'YEAR(registerDate)= YEAR(CURDATE())' – 2012-03-05 17:20:39

+3

上面是MySQL。 MS SQL Server使用'GETDATE()'。請發佈您正在使用的RDBMS。 – 2012-03-05 17:25:21

+0

謝謝@Michael,但你爲什麼不把它作爲答案發送,所以我可以接受它:)謝謝你的幫助。 – 2012-03-06 08:44:15

回答

3
SELECT * 
FROM Student 
WHERE YEAR(registerDate) = YEAR(getdate()) 
2

如果碰巧你的SQL的味道微軟TSQL那麼這個工程:

SELECT * FROM Student Where datepart(yy,registerDate) = datepart(yy,GetDate()) 
6

最直接的解決辦法是使用在YEARDATEPART功能的任何SQL的味道你使用。這可能會滿足您的需求,但請記住,如果您在表格中搜索匹配項,此方法不允許使用索引。在這種情況下,使用BETWEEN運算符會更高效。

例如

SELECT id, name, registerDate 
FROM Student 
WHERE registerDate BETWEEN 2012-01-01 and 2012-12-31 

如何生成當年的第一天和最後一天將因SQL風格而異。

因爲您正在使用範圍,並且可以使用索引。如果您正在使用函數計算每行的年份,則需要計算表中的每一行,而不是直接查找相關行。

+0

加一個比我自己更徹底的答案:) – RThomas 2012-03-05 17:28:14

0

這應爲SQL查詢工作:

SELECT * FROM myTable 
WHERE month_column = MONTH(CURDATE()) AND 
year_column =YEAR(CURDATE()) 
相關問題