Sql 计算服务年限
我进行了以下sql查询,以获取服务10年的所有员工的列表。我想知道这是否是最好、最有效的方法。例如:如何计算12.5岁在职员工的名单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
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()))