SQL查询,以';yy年mm月dd日';

SQL查询,以';yy年mm月dd日';,sql,sql-server,Sql,Sql Server,我想以“yy年mm月dd日”的格式查询员工的经验 SELECT EMPID, EMPNAME, DEPARTMENT, DESIGNATION, DATEDIFF(YEAR, DOJ, GETDATE()) AS EXPERIENCE, EMPSTATUS AS JOB_STATUS FROM EMPLOYEE DOJ-数据库中用于保存员工“加入日期”的字段。 这是一个仅返回年经验的查询。如何修改它?用于测试 SELECT EMPID, EMPNAME, DEPAR

我想以“yy年mm月dd日”的格式查询员工的经验

SELECT EMPID, EMPNAME, DEPARTMENT, DESIGNATION, DATEDIFF(YEAR, DOJ, GETDATE()) AS EXPERIENCE, 
       EMPSTATUS AS JOB_STATUS 
FROM EMPLOYEE
DOJ-数据库中用于保存员工“加入日期”的字段。 这是一个仅返回年经验的查询。如何修改它?

用于测试

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
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
用于测试

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

将Emp_joiningDate视为列

选择DATEDIFF(year,Emp_joiningDate,GETDATE())作为年份

   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

将Emp_joiningDate视为列

选择DATEDIFF(year,Emp_joiningDate,GETDATE())作为年份

   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
DECLARE@FromDate-DATETIME='2013-12-01 23:59:59.000',
@ToDate DATETIME='2016-08-30 00:00:00.000',
声明@MONTHS INT
设置@Months=DATEDIFF(MM、@FROMDATE、@TODATE)
如果(DATEPART(MM,@FromDate)
DECLARE@FromDate DATETIME='2013-12-01 23:59:59.000',
@ToDate DATETIME='2016-08-30 00:00:00.000',
声明@MONTHS INT
设置@Months=DATEDIFF(MM、@FROMDATE、@TODATE)

IF(DATEPART(MM,@FromDate)创建函数[dbo]。[fn_getemployeeperiod] ( @出生日期时间 ) 返回VARCHAR(100) 作为 开始 声明@currentdatetime日期时间; 宣布@years INT; 申报@months INT; 声明@days INT; 声明@currentMonthdays INT; 声明@result VARCHAR(100); 设置@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;

创建函数[dbo]。[fn_getEmployePeriod] ( @出生日期时间 ) 返回VARCHAR(100) 作为 开始 声明@currentdatetime日期时间; 宣布@years INT; 申报@months INT; 声明@days INT; 声明@currentMonthdays INT; 声明@result VARCHAR(100); 设置@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;

请编辑您的问题,为您使用的数据库添加标记(猜测
sql server
)。您在员工表中显示为经验的字段的实际名称是什么请编辑您的问题,为您使用的数据库添加标记(猜测
sql server
)。您在员工表中显示为经验的字段的实际名称是什么?我收到一个错误,如“CONCAT”不是可识别的函数名。我使用的是SQL Server 2008,很抱歉我在问题中没有提到它。@sanuj更新了答案和SQL FIDLE。我收到一个错误,如“CONCAT”不是可识别的函数名。我正在使用SQL Server 2008,很抱歉我在问题中没有提到它。@sanuj更新了答案和SQL FIDLE。