Sql 将GETDATE与DATEDIFF一起使用?
我的目标是找到比当前日期早3年以上的雇员,但我对语法感到困惑。问题就在这里Sql 将GETDATE与DATEDIFF一起使用?,sql,sql-server,Sql,Sql Server,我的目标是找到比当前日期早3年以上的雇员,但我对语法感到困惑。问题就在这里 IF DATEDIFF(year,HireDate,GETDATE) > 3 尝试: 如果DATEADD(第三年,雇佣期)不要使用DATEDIFF()!使用DATEADD(): 其中HireDate=3使用括号表示getdate:datediff(year,Hiredate,getdate())是的,这不起作用,因为它只查看日期的年份部分,所以datediff(year,'20161231',20170101'
IF DATEDIFF(year,HireDate,GETDATE) > 3
尝试:
如果DATEADD(第三年,雇佣期)不要使用DATEDIFF()!使用DATEADD()
:
其中HireDate
DATEDIFF()。它计算两个日期之间的年边界数。因此,2015年1月1日和2016年12月31日之间的差额为1年
此外,对于DATEDIFF()
,列是函数的参数。这将阻止SQL Server对列使用索引。DATEADD()
没有问题,因为参数是GETDATE()
,而不是表中的列。请尝试此查询以解决问题
从TableName中选择Hiredate
其中datediff(year,Hiredate,getdate())>=3使用括号表示getdate
:datediff(year,Hiredate,getdate())
是的,这不起作用,因为它只查看日期的年份部分,所以datediff(year,'20161231',20170101')将返回1的答案。你最好先用月再除以12,或者用天再除以365。阅读Gordon的答案……我建议使用Pradeep Kumar Prabaharan答案中的SELECT行和Gordon Linoff答案中的WHERE行。最好不要在列中使用函数,因此更好的方法是HireDate
这样,如果有HireDate的索引,也可以使用它。
SELECT HireDate from table_name
WHERE DATEDIFF(Year, HireDate, GETDATE()) > 3
if DATEADD(year,3,HireDate)<GETDATE()
where HireDate < dateadd(year, -3, GETDATE())