这是我的Student桌子
Id(int) | Name(varchar) | registerDate(Date)
1 John 2012-01-01
Run Code Online (Sandbox Code Playgroud)
如何编写相应的查询以检查此人的registerDate值是否与当前年份(2012年)相同?
最直接的解决方案是在您使用的SQL的任何风格中使用YEAR或DATEPART函数.这可能会满足您的需求,但请记住,如果您在表中搜索匹配项,则此方法不允许您使用索引.在这种情况下,使用BETWEEN运营商会更有效.
例如
SELECT id, name, registerDate
FROM Student
WHERE registerDate BETWEEN 2012-01-01 and 2012-12-31
Run Code Online (Sandbox Code Playgroud)
如何生成当年的第一天和最后一天将因SQL风格而异.
因为您正在使用范围,所以可以使用索引.如果您使用函数计算每行的年份,则需要为表中的每一行计算,而不是直接查找相关行.
SELECT *
FROM Student
WHERE YEAR(registerDate) = YEAR(getdate())
Run Code Online (Sandbox Code Playgroud)