2012-11-06 75 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 
相關問題