Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将GETDATE与DATEDIFF一起使用?_Sql_Sql Server - Fatal编程技术网

Sql 将GETDATE与DATEDIFF一起使用?

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'

我的目标是找到比当前日期早3年以上的雇员,但我对语法感到困惑。问题就在这里

 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())