2012-11-06 56 views
5

为了得到我用这个当前的日期..的Oracle SQL,如何使用当前的日期 - 指定日期

select extract(year from sysdate) from dual; 

为了得到我的数据库保持我用这个日期..

select extract(year from startdate) from staff; 

但现在我试图更新里面的工作人员现场呼叫serviceYears,通过使用

current year - year of start date

以获得工作人员承诺工作的年数。我如何实现呢..

我使用的Oracle SQL

谢谢!

我试图用

SQL> select dual.sysdate-staff.startdatefrom dual,staff; 

select dual.sysdate-staff.startdatefrom from dual,staff 
      * 
ERROR at line 1: 
ORA-01747: invalid user.table.column, table.column, or column specification 

我也试过

select SYSDATE-to_date('01-jan-2007','dd-mon-yyyy') from dual; 

But it return me 
SYSDATE-TO_DATE('01-JAN-2007','DD-MON-YYYY') 
-------------------------------------------- 
            2136.93719 

如何我刚刚得到的一年?

+1

应该“serviceYears”是一个整数吗?即如果一名工作人员工作了6年1个月,您想要什么,6年11个月又如何?这也将成为视图/虚拟列的更好的数据,因为数据需要一直保持不变。 – DazzaL

回答

8

你可以做到这一点

UPDATE STAFF 
SET serviceYear = ROUND((sysdate - startDate)/365) 

例:

select ROUND((sysdate - to_date('01-JAN-2007','DD-MON-YYYY'))/365) 
from dual; -- returns 6 


select ROUND((sysdate - to_date('01-JAN-2005','DD-MON-YYYY'))/365,2) 
from dual; -- returns 7.85 

更新时间:

SELECT 
FLOOR((SYSDATE - TO_DATE('01-JAN-2005','DD-MON-YYYY'))/365) YEARDOWN, 
CEIL((SYSDATE - TO_DATE('01-JAN-2005','DD-MON-YYYY'))/365) YearUP 
FROM DUAL; 
+0

我如何取而代之,导致一些工人从2005年开始工作,但它将服务年计为8年,而现在只有2012年。例如,这个startDate 01-JAN-05,但是服务时间长度是8 – user1777711

+0

检查我更新的答案 –

+0

不希望看到根据天数计算的年数 - months_between()将是更好的选择,我想。 –

1

你不需要dual.sysdate - 你可以参考sysdate。

select sysdate-staff.startdatefrom from staff 
+0

我如何在一年中得到答案:) – user1777711

+0

这将在几天内 - 所以你会除以365得到(小数)年份。那么你可以回合。 – Randy

1

我想你可能会更好地服务于FLOORMONTHS_BETWEEN的组合。

SQL> CREATE TABLE t (start_date DATE); 

Table created. 

SQL> INSERT INTO t VALUES (TO_DATE('20070930','YYYYMMDD')); 

1 row created. 

SQL> SELECT FLOOR(MONTHS_BETWEEN(TRUNC(SYSDATE), start_date)/12) yrs_between_start_dt_and_today FROM t 
    2 ; 

YRS_BETWEEN_START_DT_AND_TODAY 
------------------------------ 
          5 

SQL> 

您可以根据需要调整舍入。此外,与闰年相比,这种解决方案的效果更好,相比之下,通过硬编码的365.

+0

是的,基于月份的解决方案为+1。 –

-1
SELECT extract(year from sysdate)-extract(year from TDATE) 
     FROM R_M 
CONNECT BY LEVEL <=1 
相关问题