2012-03-05 78 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()) 
相关问题