0

次のクエリで助けてください すべての従業員の従業員名、部署名、給与、等級、経験 (例: XX 年 YY 月 ZZ 日) を表示します

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;
4

3 に答える 3

1

あなたは年を持っています。

月を取得するために使用MONTHS_BETWEEN(date1, date2)します。次に、(年 * 12) を引きます。

DAYS_BETWEEN(date1, date2)日数を取得するために使用します。

詳しくはこちらをご覧ください

于 2012-10-19T07:12:14.617 に答える
0

これは、私が作業しているT-SQL(SQL Server)ソリューションです(これまでのテストに基づいています)。悲しいことに、私は再生するオラクルのインスタンスを持っていませんが、これを変換するのはそれほど難しくないはずです:

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 = @tYYYY-@fyyyy
if @fMM > @tMM or (@fMM=@tMM 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' '
于 2012-10-19T08:23:26.087 に答える