这个是scott 的四张表的操作练习以年月日的格式显示出所有员工的大概工作年限(如20年3个月2天)select ename,
ni||yu||ti as time
from
(select ename,
nian||'年' as ni ,
yue-nian*12||'个月' as yu ,
tian-yue*30||'天' as ti
from
(select ename,floor(sysdate-hiredate) as tian ,
floor((sysdate-hiredate)/365) as nian ,
floor((sysdate-hiredate)/30) as yue
from
emp));这个问题我只能按照一年365天一月30天计算吧
就是说能不能带上闰年呀 ,闰月呀, 有的月31天 有的月30天呀什么的··
ni||yu||ti as time
from
(select ename,
nian||'年' as ni ,
yue-nian*12||'个月' as yu ,
tian-yue*30||'天' as ti
from
(select ename,floor(sysdate-hiredate) as tian ,
floor((sysdate-hiredate)/365) as nian ,
floor((sysdate-hiredate)/30) as yue
from
emp));这个问题我只能按照一年365天一月30天计算吧
就是说能不能带上闰年呀 ,闰月呀, 有的月31天 有的月30天呀什么的··
SQL> select ename,
2 numtoyminterval(months_between(sdt,hdt),'month') year_month,
3 numtodsinterval(sdt-add_months(hdt,trunc(months_between(sdt,hdt))),'day') days_hours
4 from
5 (select ename,
6 sysdate sdt,
7 to_date(to_char(hiredate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') hdt
8 from emp)
9 /
ENAME YEAR_MONTH DAYS_HOURS
---------- --------------------------------------- ---------------------------------------
SMITH +000000030-05 +000000026 19:06:28.000000000
ALLEN +000000030-03 +000000023 19:06:28.000000000
WARD +000000030-03 +000000021 19:06:28.000000000
JONES +000000030-02 +000000010 19:06:28.000000000
MARTIN +000000029-08 +000000015 19:06:28.000000000
BLAKE +000000030-01 +000000011 19:06:28.000000000
CLARK +000000030-00 +000000003 19:06:28.000000000
SCOTT +000000024-01 +000000024 19:06:28.000000000
KING +000000029-06 +000000026 19:06:28.000000000
TURNER +000000029-09 +000000004 19:06:28.000000000
ADAMS +000000024-00 +000000020 19:06:28.000000000
JAMES +000000029-06 +000000009 19:06:28.000000000
FORD +000000029-06 +000000009 19:06:28.000000000
MILLER +000000029-04 +000000020 19:06:28.000000000
--MILLER工作时长:29年4个月20天19个小时6分钟28秒
14 rows selected
--你也可以使用substr函数截取你想要的数据
SQL> select ename,substr(year_month,9,2)||'年'||
2 substr(year_month,12,2)||'个月'||
3 substr(days_hours,9,2)||'天'
4 from (
5 select ename,
6 numtoyminterval(months_between(sysdate,hiredate),'month') year_month,
7 numtodsinterval(sysdate-add_months(hiredate,trunc(months_between(sysdate,hiredate))),'day') days_hours
8 from emp)
9 /
ENAME SUBSTR(YEAR_MONTH,9,2)||'年'||
---------- ------------------------------
SMITH 30年05个月26天
ALLEN 30年03个月23天
WARD 30年03个月21天
JONES 30年02个月10天
MARTIN 29年08个月15天
BLAKE 30年01个月11天
CLARK 30年00个月03天
SCOTT 24年01个月24天
KING 29年06个月26天
TURNER 29年09个月04天
ADAMS 24年00个月20天
JAMES 29年06个月09天
FORD 29年06个月09天
MILLER 29年04个月20天
14 rows selected
得出的结果比我得出的结果都要小上五个多月, 老早我就觉得我那答案有问题了,
我去研究研究那函数。 结贴了 爱死CSDN了 爱死大神们了··