7

現在の日付を取得するには、これを使用します。

select extract(year from sysdate) from dual;

私のデータベースが保持する日付を取得するために、私はこれを使用します。

select extract(year from startdate) from staff;

しかし今、私はスタッフ内のフィールドコールserviceYearsを更新しようとしています。

current year - year of start date

スタッフが仕事に費やした年数を取得するため。どうすればそれを達成できますか。

私はOracleSQLを使用しています

ありがとう!

使ってみました

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

どうすれば年を取得できますか?

4

5 に答える 5

10

あなたはこれを行うことができます

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;
于 2012-11-06T14:30:58.913 に答える
1

dual.sysdateは必要ありません-sysdateを参照するだけです。

select sysdate-staff.startdatefrom from staff
于 2012-11-06T14:29:21.800 に答える
1

FLOORとの組み合わせの方が良いと思いますMONTHS_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で除算する場合と比較して、うるう年などでより適切に機能します。

于 2012-11-06T15:54:24.830 に答える
0

月単位で測定できる場合は、months_between関数を試してください。

http://www.techonthenet.com/oracle/functions/months_between.php

http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions094.htm#i78039

それを取り、12で割って年を得ることができます。

于 2012-11-06T14:42:51.960 に答える
-1
    SELECT extract(year from sysdate)-extract(year from TDATE) 
      FROM R_M 
CONNECT BY LEVEL <=1
于 2016-04-13T09:07:55.060 に答える