计算服务年限

时间:2015-07-01 11:41:33

标签: sql sql-server sql-server-2012

我进行了以下sql查询,以获取10年服务的所有员工的列表。我想知道这是否是最好和最有效的方法。例如:如何计算12.5中服务的所有员工的列表?

DECLARE     @YEAR_CURRENT VARCHAR(4)
SET         @YEAR_CURRENT = Year(getdate())

SELECT 
    DISTINCT 
    fullname, 
    CONVERT(varchar(10),CONVERT(date,DATEADD(year,10,years_in_service)),105) as 'anniversary', 
    ROUND((Datediff(dd,years_in_service,isnull(@YEAR_CURRENT,getdate()))/CONVERT(FLOAT, 365)),1) AS years_in_service_today
FROM my_database
WHERE
    AND ROUND((Datediff(dd,years_in_service,isnull( @YEAR_CURRENT,getdate()))/CONVERT(FLOAT, 365)),1) >= 10
    AND ROUND((Datediff(dd,years_in_service,isnull( @YEAR_CURRENT,getdate()))/CONVERT(FLOAT, 365)),1) < 11
ORDER BY 
    fullname ASC

1 个答案:

答案 0 :(得分:1)

这不是最有效的方式。更好的比较是:

WHERE years_in_service >= dateadd(-11, year, coalesce(@YEAR_CURRENT, getdate())) and
      years_in_service < dateadd(-10, year, coalesce(@YEAR_CURRENT, getdate()))

这更有效,因为它可以在years_in_service上使用索引。当列上有函数时,通常不能使用索引。

如果你想要12。5年,那么将逻辑改为几个月而不是几年:

WHERE years_in_service >= dateadd(-(12 * 12 + 6), month, coalesce(@YEAR_CURRENT, getdate())) and
      years_in_service < dateadd(-12 * 12, month, coalesce(@YEAR_CURRENT, getdate()))