计算工龄,精确到年月日select trunc((sysdate - HR_STARTWORKDATE)/365,2) from hr_filemanager where hr_filemanager_id=10000109工作开始日期为 2012-10-10 ,这样计算出来的为 0.47 如 0.47 如果直观的看的话,为4个月,零7天,而实际为6个月,(到当前日期 2013-4-1 )。我想要的是如果不满1年就算出他的月和日,如果不足1月就算出日,如果为1年以上就算出年月日。。 如果工作开始日期为2012-10-10 那么结果就应该为 0.6 表示工作时间为6个月,如果是工作了6个多月了,那么结果就应该是0.65 ,为6个月零5天这样的。而不是0.47。 我的上面的sql 对于计算 工作满1年以上的,可以非常的直观的看出来 如 2.73,为2年7月3天,但是如果工作不满一年的话。就像我上面的0.47 ,就个人错觉 为 4个月零7天。求高手,我的这一句sql 要怎么写,才可以。非常的感谢了
计算工龄,精确到年月日select trunc((sysdate - HR_STARTWORKDATE)/365,2) from hr_filemanager where hr_filemanager_id=10000109工作开始日期为 2012-10-10 ,这样计算出来的为 0.47 如 0.47 如果直观的看的话,为4个月,零7天,而实际为6个月,(到当前日期 2013-4-1 )。我想要的是如果不满1年就算出他的月和日,如果不足1月就算出日,如果为1年以上就算出年月日。。 如果工作开始日期为2012-10-10 那么结果就应该为 0.6 表示工作时间为6个月,如果是工作了6个多月了,那么结果就应该是0.65 ,为6个月零5天这样的。而不是0.47。 我的上面的sql 对于计算 工作满1年以上的,可以非常的直观的看出来 如 2.73,为2年7月3天,但是如果工作不满一年的话。就像我上面的0.47 ,就个人错觉 为 4个月零7天。求高手,我的这一句sql 要怎么写,才可以。非常的感谢了
from
(select round(to_number(TO_DATE(to_char(sysdate,'yyyy-mm-dd'), 'yyyy-mm-dd') - TO_DATE(to_char(HR_STARTWORKDATE,'yyyy-mm-dd'),'yyyy-mm-dd'))) as dateTimes
from hr_filemanager ) bs看看 这个 样 写怎么样
TRUNC (MOD (MONTHS_BETWEEN (SYSDATE + 400, SYSDATE), 12)) months,
ROUND (MOD (MOD (MONTHS_BETWEEN (SYSDATE + 400, SYSDATE), 12), 1) * 30
) days
FROM DUAL
自己参考着修改吧
那 你就 改成 select trunc(to_number(dateTimes) / 365) , trunc(to_number(dateTimes)%12),trunc(to_number(dateTimes)%30)
from
(select round(to_number(TO_DATE(to_char(sysdate,'yyyy-mm-dd'), 'yyyy-mm-dd') - TO_DATE(to_char(HR_STARTWORKDATE,'yyyy-mm-dd'),'yyyy-mm-dd'))) as dateTimes
from hr_filemanager ) bs
select trunc(to_number(dateTimes) / 365),
mod(to_number(dateTimes), 12),
mod(to_number(dateTimes), 30)
from (select round(to_number(TO_DATE(to_char(sysdate, 'yyyy-mm-dd'),
'yyyy-mm-dd') -
TO_DATE(to_char(HR_STARTWORKDATE,
'yyyy-mm-dd'),
'yyyy-mm-dd'))) as dateTimes
from hr_filemanager) bs
select
trunc(to_number(workdate)/365),mod(to_number(workdate),12), mod(to_number(workdate),30)
from(select round(to_number(TO_DATE(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd') - TO_DATE(to_char(HR_STARTWORKDATE,'yyyy-mm-dd'),'yyyy-mm-dd'))) AS workdate from hr_filemanager)改为一句sql即不是上面的子查询。
trunc((to_number(round(to_number(TO_DATE(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd') - TO_DATE(to_char(THIRD_UPDATETIME,'yyyy-mm-dd'),'yyyy-mm-dd')))))/365)
,
trunc(MONTHS_BETWEEN(to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd'), TO_DATE('2013-02-10', 'yyyy-mm-dd')),0)
,
mod(to_number(round(to_number(TO_DATE(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd') - TO_DATE(to_char(THIRD_UPDATETIME,'yyyy-mm-dd'),'yyyy-mm-dd')))),30)
from tab_third_party这个肯定行了 ,你再看看吧
'yyyy-mm-dd'),
'yyyy-mm-dd') -
TO_DATE(to_char(HR_STARTWORKDATE,
'yyyy-mm-dd'),
'yyyy-mm-dd'))))) / 365),
mod(trunc(MONTHS_BETWEEN(to_date(to_char(sysdate, 'yyyy-mm-dd'),
'yyyy-mm-dd'),
to_date(to_char(HR_STARTWORKDATE,
'yyyy-mm-dd'),
'yyyy-mm-dd')),
0),
12),
mod(to_number(round(to_number(TO_DATE(to_char(sysdate, 'yyyy-mm-dd'),
'yyyy-mm-dd') -
TO_DATE(to_char(HR_STARTWORKDATE,
'yyyy-mm-dd'),
'yyyy-mm-dd')))),
30) from hr_filemanager