获取当前日期我使用此..
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
我如何才能获得这一年?
答案 0 :(得分: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;
答案 1 :(得分:1)
你不需要dual.sysdate - 你可以只引用sysdate。
select sysdate-staff.startdatefrom from staff
答案 2 :(得分: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进行划分相比,此解决方案在闰年等方面表现更好。
答案 3 :(得分: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来获得年份。
答案 4 :(得分:-1)
SELECT extract(year from sysdate)-extract(year from TDATE)
FROM R_M
CONNECT BY LEVEL <=1