2012-10-19 72 views
0

请在以下查询帮助 显示员工姓名,部门名称,薪水,等级,经验(EX:XX年YY月ZZ日)的所有员工显示员工姓名,部门名称,薪水,年级,经验(EX:XX年YY月ZZ天)SQL的所有员工

ENAME  DNAME SAL GRADE  EXPERIENCE 

SCOTT RESEARCH 3000 4  12 Years 3 months 15 days 

这样,我需要得到的输出。

我试图写高达年,但月,日我不能够得到。

select distinct ename,dname,sal,grade, 
(round((months_between(sysdate,hiredate)/12))||' years' EXP 
from emp,salgrade,dept 
where dept.deptno=emp.deptno and sal between losal and highsal; 
+0

请加结构的表格,样本记录和您想要的输出。 :) –

+2

告诉我们你已经尝试过了。谷歌它之前你Stackoverflow它! (我刚发明了一种新的动词!) –

回答

0

这里,我已经有了一个工作的T-SQL(SQL Server)的解决方案(基于测试至今)。可悲的是我没有一个Oracle实例上播放,但希望这不应该是太难转换:

declare @fromDate date = '2010-11-21' 
, @toDate date = getutcdate() 

--from date must be before to date 
declare @tempDate date 
if @toDate < @fromDate 
begin 
    set @tempDate = @toDate 
    set @toDate = @fromDate 
    set @fromDate = @tempDate 
end 

declare @fDD int = datepart(dd,@fromdate) 
, @tDD int = datepart(dd,@todate) 
, @fMM int = datepart(mm,@fromdate) 
, @tMM int = datepart(mm,@todate) 
, @fYYYY int = datepart(yyyy,@fromdate) 
, @tYYYY int = datepart(yyyy,@todate) 
, @y int, @m int, @d int 

--calc difference in years 
set @y = @[email protected] 
if @fMM > @tMM or (@[email protected] and @fDD > @tDD) 
begin 
    set @y = @y - 1 
    set @fYYYY = @fYYYY + @y 
    set @tempDate = DATEADD(year,@y,@fromDate) 
end 

--calc remaining difference in months 
set @m = DATEDIFF(month,@tempDate,@toDate) 
if @tDD < @fDD 
begin 
    set @m = @m-1 
    set @tempDate = DATEADD(month,@m,@tempDate) 
end 

--calc remaining difference in days 
set @d = DATEDIFF(day,@tempDate,@toDate) 

--display results in user friendly and grammatically correct way 
select cast(@y as nvarchar(3)) + N' year' + case when @y = 1 then N'' else N's' end + N' ' 
+ cast(@m as nvarchar(2)) + N' month' + case when @m = 1 then N'' else N's' end + N' ' 
+ cast(@d as nvarchar(3)) + N' day' + case when @d = 1 then N'' else N's' end + N' ' 
1

你已经有这么多年了。

使用MONTHS_BETWEEN(date1, date2)拿到个月。然后减去(年* 12)。

使用DAYS_BETWEEN(date1, date2)得到的天数。

See this for more details

+0

我试过,但没有得到...ü可以尝试,并给我确切的查询。 – user1758446

+0

我认为应该有它,我不知道一个更简单的方法。我会回到这个。 –

0

下面是Oracle SQL你需要的答案

select (floor(months_between(sysdate,hiredate)/12)) YEARS, 
round(((months_between(sysdate,hiredate)/12)-(round(months_between(sysdate,hiredate)/12)))*12) months 
from abc; 
+0

如果你拿出一个更好的答案和张贴 作为一个新鲜的我可以学习到一些程度上我将不胜感激 – user3095423

相关问题