Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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 计算服务年限_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql 计算服务年限

Sql 计算服务年限,sql,sql-server,sql-server-2012,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_se

我进行了以下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
DECLARE@YEAR\u CURRENT VARCHAR(4)
设置@YEAR\u CURRENT=YEAR(getdate())
挑选
不同的
全名,
转换(varchar(10),转换(日期,日期添加(年,10,服务年)),105)为“周年纪念日”,
舍入((Datediff(dd,服务年数,isnull(@YEAR\u CURRENT,getdate())/CONVERT(FLOAT,365)),1)作为当前服务年数
从我的大学数据库
哪里
和ROUND((Datediff(dd,years_in_service,isnull(@YEAR_CURRENT,getdate())/CONVERT(FLOAT,365)),1)>=10
和ROUND((Datediff(dd,years_in_service,isnull(@YEAR_CURRENT,getdate())/CONVERT(FLOAT,365)),1)<11
订购人
全名ASC

这不是最有效的方法。一个更好的比较是:

WHERE years_in_service >= dateadd(-11, year, coalesce(@YEAR_CURRENT, getdate())) and
      years_in_service < dateadd(-10, year, coalesce(@YEAR_CURRENT, getdate()))
dateadd(11,year,coalesce(@year\u CURRENT,getdate())
不会计算11年后的日期吗?是否有一个我可能忽略的
-
。不,不我希望所有这些数字都是负数。(我现在对此感到有点尴尬。)
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()))