使用MONTHS_BETWEEN 和ADD_MONTHS:
SELECT name,
date_of_employment,
ADD_MONTHS(
date_of_employment,
(EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM date_of_employment))*12
) AS anniversary,
MONTHS_BETWEEN(SYSDATE, date_of_employment)/12
AS years_with_business,
TRUNC(MONTHS_BETWEEN(SYSDATE, date_of_employment)/12)
AS full_years_with_business
FROM table_name;
其中,对于样本数据:
CREATE TABLE table_name ( name, date_of_employment ) AS
SELECT 'Alice', ADD_MONTHS(TRUNC(SYSDATE - 1), -120) FROM DUAL UNION ALL
SELECT 'Beryl', ADD_MONTHS(TRUNC(SYSDATE + 0), -120) FROM DUAL UNION ALL
SELECT 'Carol', ADD_MONTHS(TRUNC(SYSDATE + 1), -120) FROM DUAL UNION ALL
SELECT 'Debra', ADD_MONTHS(TRUNC(SYSDATE - 1), +12) FROM DUAL UNION ALL
SELECT 'Emma', ADD_MONTHS(TRUNC(SYSDATE + 0), +12) FROM DUAL UNION ALL
SELECT 'Frances', ADD_MONTHS(TRUNC(SYSDATE + 1), +12) FROM DUAL;
输出:
| NAME |
DATE_OF_EMPLOYMENT |
ANNIVERSARY |
YEARS_WITH_BUSINESS |
FULL_YEARS_WITH_BUSINESS |
| Alice |
2011-08-18 00:00:00 |
2021-08-18 00:00:00 |
10.00435082511947431302270011947431302267 |
10 |
| Beryl |
2011-08-19 00:00:00 |
2021-08-19 00:00:00 |
10 |
10 |
| Carol |
2011-08-20 00:00:00 |
2021-08-20 00:00:00 |
9.99897448103345280764635603345280764633 |
9 |
| Debra |
2022-08-18 00:00:00 |
2021-08-18 00:00:00 |
-.9956491748805256869772998805256869773 |
0 |
| Emma |
2022-08-19 00:00:00 |
2021-08-19 00:00:00 |
-1 |
-1 |
| Frances |
2022-08-20 00:00:00 |
2021-08-20 00:00:00 |
-1.00102551896654719235364396654719235364 |
-1 |
db小提琴here