我正在尝试使用函数EXTRACT:
来获取此查询的年份用户SELECT EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM contact.BIRTHDATE) AS CONTACT_YEARS
FROM CONTACT contact
但是对于某些日期,例如:contact.BIRTHDATE = '27 -AGO-40'函数EXTRACT(YEAR FROM contact.BIRTHDATE)返回2040并且查询不起作用。
我也尝试过使用to_date(contact.BIRTHDATE, 'dd/mm/yyyy')
但日期格式不会改变。
谢谢!
答案 0 :(得分:1)
您只显示两位数的日期年份部分。如果您显示全年,那么您可能会看到日期具有不正确的世纪。
此外,您可以更好地使用:
,而不是减去年份以获得多年的差异TRUNC( MONTHS_BETWEEN( sysdate, birthdate ) / 12 )
Oracle安装程序:
CREATE TABLE contact( BIRTHDATE DATE );
INSERT INTO contact ( birthdate )
SELECT DATE '1977-03-29' FROM DUAL UNION ALL
SELECT DATE '77-03-29' FROM DUAL UNION ALL
SELECT DATE '1977-03-30' FROM DUAL;
<强>查询强>:
SELECT TO_CHAR( birthdate, 'YYYY-MM-DD' ) AS full_year,
TO_CHAR( birthdate, 'YY-MM-DD' ) AS short_year,
EXTRACT( YEAR FROM sysdate ) - EXTRACT( YEAR FROM birthdate ) AS age,
TRUNC( MONTHS_BETWEEN( sysdate, birthdate ) / 12 ) AS actual_age
FROM contact;
<强>输出强>:
FULL_YEAR SHORT_YEAR AGE ACTUAL_AGE
---------- ---------- ---- ----------
1977-03-29 77-03-29 40 40
0077-03-29 77-03-29 1940 1940
1977-03-30 77-03-30 40 39