简体   繁体   English

SQL查询以“ yy years mm months dd dd days”的格式查询员工的经历

[英]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.

相关问题 在SQL中显示所有员工的员工姓名,部门名称,薪水,等级,经验(例如:XX年YY月ZZ天) - Display Employee Name, Dept Name, Salary, Grade, Experience (EX: XX Years YY Months ZZ Days) for all the employees in SQL 在Sql Server中以YY / MM格式计算和显示总经验月 - Calculate and Display Total Experience Months in YY/MM format in Sql Server 返回过去6个月以dd / mm / yy格式显示的所有日期 - Returning all dates in dd/mm/yy format from the past 6 months 临时更改SQL查询输出MM / YY-&gt; MM / DD / YYYY中日期列的格式 - Temporarily change format of a date column in SQL Query output MM/YY -> MM/DD/YYYY SQL Server:将日期格式为dddd mm / dd / yy的字符串转换为日期 - SQL Server : convert string with format dddd mm/dd/yy to date SQL将&#39;mm / dd / yy&#39;字符串转换为日期格式 - SQL Convert 'mm/dd/yy' string to date format 使用 sql 查询在 dateadd 中添加日期,但需要格式“dd/mm/yyyy hh:mm:ss tt” - Add days in dateadd but needed format "dd/mm/yyyy hh:mm:ss tt" using sql query SQL日期格式转换? [dd.mm.yy到YYYY-MM-DD] - SQL date format convert? [dd.mm.yy to YYYY-MM-DD] SQL 服务器 mm/dd/yy 或 yy/dd/mm 或其他格式的 T-SQL 日期数据类型格式? - T-SQL date data type format for SQL Server mm/dd/yy or yy/dd/mm or something else? 从“ dd.mm.yy”格式以“ dd.mm”格式显示“生日”,但前提是该“生日”有10名以上的员工 - Show “birthday” days in format 'dd.mm' from format 'dd.mm.yy' but only if that “birthday” has more than 10 employees
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM