创建一个变量来存储DATEDIFF大于3的计数

时间:2014-06-16 14:57:56

标签: sql variables count datediff

这可能非常简单,我可能会过度思考它。我必须创建一个变量,用于存储在公司工作超过3年的员工数量。

这是我想出的,因为原始表没有存储年份,只有一个列有雇用日期的列。

DECLARE @YearsEmployed int,
 @Plus3 int,
 @EmpCount int
 SET @YearsEmployed =   (SELECT DATEDIFF(YY,HireDate,GetDate())
    FROM employees)
 SET @Plus3 = @YearsEmployed > 3
 SET    @EmpCount = COUNT(@Plus3)

 SELECT @EmpCount

我已经收到“>'附近的错误语法”错误,我对如何继续进行了解释。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

对我来说似乎是一个简单的问题:

select count(1)
from employees
where HireDate < dateadd(year, -3, getdate())

注意我选择了dateadd当前日期,而不是列值的datediff表达式,因为后者不是SARGable


就您编写的代码而言,错误来自于尝试将布尔表达式(@YearsEmployed > 3)的结果分配给变量。此外,如果SET @YearsEmployed = ...中有多行,则查询employees将失败。另外,我不相信COUNT()可以在查询之外使用 - 即使可以,也不会做任何有用的事情。

答案 1 :(得分:0)

以下查询将为您计算在公司工作超过3年的员工数量:

       DECLARE @EmpCount int

       SET @EmpCount =   (SELECT count(DATEDIFF(YY,HireDate,GetDate()))
       FROM employees where DATEDIFF(YY,HireDate,GetDate()) > 3)

       SELECT @EmpCount

COUNT和挑选已经工作超过3年的员工的条件可以包含在查询中并存储在变量中,而不是使用多个变量然后计算这些变量。

由于