[英]SQL query to find out experience of employee in the format 'yy years mm months dd days'
I want a query to find out experience of employee in the format 'yy years mm months dd days'. 我想以“ yy years mm months dd days”的格式查询员工的工作经历。
SELECT EMPID, EMPNAME, DEPARTMENT, DESIGNATION, DATEDIFF(YEAR, DOJ, GETDATE()) AS EXPERIENCE,
EMPSTATUS AS JOB_STATUS
FROM EMPLOYEE
DOJ - field in db for saving 'date of joining' of employee. DOJ-数据库中的字段,用于保存员工的“加入日期”。 This is the query which returns experience in years only.
这是仅返回多年经验的查询。 How to modify it?
如何修改?
SELECT
EMPID, EMPNAME, DEPARTMENT, DESIGNATION,
convert(varchar(3),DATEDIFF(MONTH, DOJ, GETDATE())/12) +' years '+
convert(varchar(2),DATEDIFF(MONTH, DOJ, GETDATE()) % 12)+ ' months'
AS EXPERIENCE,
EMPSTATUS AS JOB_STATUS
FROM EMPLOYEE
Consider Emp_joiningDate as column 将Emp_joiningDate视为列
SELECT DATEDIFF(year, Emp_joiningDate, GETDATE()) AS Years, SELECT DATEDIFF(year,Emp_joiningDate,GETDATE())AS Years,
DATEDIFF(month, Emp_joiningDate, GETDATE()) - DATEDIFF(year, '1/2/1999', GETDATE()) * 12 AS Months,
DATEDIFF(day, Emp_joiningDate, getdate())- DATEDIFF(month, '1/2/1999',
GETDATE()) - DATEDIFF(year, '1/2/1999', GETDATE()) * 365 as Days
SQL Fiddle for testing SQL Fiddle测试
SELECT EMPID, EMPNAME, DEPARTMENT, DESIGNATION,
cast(floor(experience / 365) as varchar) + ' years ' +
cast(floor(experience % 365 / 30) as varchar) + ' months ' +
cast(experience % 30 as varchar) + ' days' as experience,
EMPSTATUS AS JOB_STATUS
FROM (select *, datediff(DAY, doj, getdate()) as experience
from employee) t
DECLARE @FromDate DATETIME = '2013-12-01 23:59:59.000',
@ToDate DATETIME = '2016-08-30 00:00:00.000',
DECLARE @MONTHS INT
SET @Months = DATEDIFF(MM,@FROMDATE,@TODATE)
IF (DATEPART(MM,@FromDate) <= (DATEPART(MM,@TODATE))+1)
BEGIN
SELECT CAST(DATEDIFF(YY,@FROMDATE,@TODATE) AS VARCHAR(5)) + ' Years '+ CAST( (DATEPART(MM,@TODATE)-DATEPART(MM,@FROMDATE)) AS VARCHAR(5))+1 +' Month'
END
ELSE
BEGIN
SELECT CAST(DATEDIFF(YY,@FROMDATE,@TODATE)-1 AS VARCHAR(5)) +' Years '+ CAST(12-(DATEPART(MM,@FROMDATE)) + DATEPART(MM,@TODATE)+1 AS VARCHAR(5) ) +' Month'
END
create FUNCTION [dbo].[fn_getEmployePeriod] ( @dateofbirth DATETIME ) RETURNS VARCHAR(100) AS BEGIN DECLARE @currentdatetime DATETIME; 创建功能[dbo]。[fn_getEmployePeriod](@dateofbirth DATETIME)返回VARCHAR(100)作为开始声明@currentdatetime DATETIME; DECLARE @years INT;
声明@years INT; DECLARE @months INT;
声明@months INT; DECLARE @days INT;
声明@days INT; DECLARE @currentMonthdays INT;
DECLARE @currentMonthdays INT; DECLARE @result VARCHAR(100);
声明@result VARCHAR(100); SET @currentdatetime = GETDATE();--current datetime
SET @currentdatetime = GETDATE();-当前日期时间
IF ( @dateofbirth <= GETDATE() )
BEGIN
SELECT @years = DATEDIFF(YEAR, @dateofbirth, @currentdatetime); -- To find Years
SELECT @months = DATEDIFF(MONTH, @dateofbirth,
@currentdatetime) - ( DATEDIFF(YEAR,
@dateofbirth,
@currentdatetime)
* 12 );
SELECT @days = DATEPART(d, @currentdatetime) - DATEPART(d,
@dateofbirth);-- To Find Days
SELECT @currentMonthdays = ( SELECT DAY(DATEADD(DD, -1,
DATEADD(mm,
DATEDIFF(mm, 0,
GETDATE()), 0)))
);
IF ( @months < 0 )
BEGIN
SET @months = 12 + @months;
SET @years = @years - 1;
END;
IF ( @days < 0 )
BEGIN
SET @days = @currentMonthdays + @days;
IF(@months<>0)
begin
SET @months = @months - 1;
END
ELSE
BEGIN
SET @years = @years - 1;
SET @months = 11;
end
END;
-- To Find Months -寻找月份
SET @result = CAST(@years AS VARCHAR(3)) + ' years, '
+ CAST(@months AS VARCHAR(3)) + ' months, '
+ CAST(@days AS VARCHAR(3)) + ' days';
END;
ELSE
BEGIN
SET @result = 'Invaild date of birth';
END;
RETURN @result;
END;
SELECT convert(varchar(3),DATEDIFF(MONTH, '2015-01-01', GETDATE())/12) +' years '+
convert(varchar(2),DATEDIFF(DD, '2016-09-21', GETDATE()) % 12)+ ' months'
AS EXPERIENCE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.