2017-08-14 74 views
-3

我需要在我指定的兩個日期之間獲得年齡爲64歲的所有員工。任何幫助,將不勝感激。兩個日期之間的年齡

我曾嘗試是:

SELECT 
    papf.person_id, 
    date_of_birth, 
    first_name, last_name, 
FROM per_all_people_f papf 
WHERE 
    paaf.person_id = NVL(:P_PERSON_ID, paaf.person_id) 
    AND :START_DATE = TO_DATE(:START_DATE, 'YYYY-MM-DD') 
    AND :END_DATE = TO_DATE(:END_DATE, 'YYYY-MM-DD') 
+3

到目前爲止您嘗試過什麼? – JohnHC

+0

添加表格定義,樣本表格數據和預期結果(均爲格式化文本)。 – jarlh

+1

@EmileArab,請編輯您的問題並分享由jarlh指出的所有數據以及查詢。 – zarruq

回答

-1

由於從Oracle查詢,請試試這個:

SELECT PER.FULL_NAME, 
    PER.DATE_OF_BIRTH, 
    ROUND(TRUNC(MONTHS_BETWEEN('your custom date', PER.DATE_OF_BIRTH))/12, 
1) 
FROM PER_ALL_PEOPLE_F PER 
WHERE TRUNC(SYSDATE) BETWEEN PER.EFFECTIVE_START_DATE AND 
PER.EFFECTIVE_END_DATE 
AND ROUND(TRUNC(MONTHS_BETWEEN('your custom date', PER.DATE_OF_BIRTH))/
12, 1) > 64 
1

試試這個: -

SELECT person_id, date_of_birth, first_name, last_name FROM per_all_people_f 
WHERE floor(months_between(date START_DATE, date END_DATE) /12)=64; 
0

我嘗試這樣做,它的工作原理:

SELECT papf.person_id, date_of_birth, INITCAP (papf.title) || ' ' || papf.first_name || ' ' || papf.last_name, employee_number, assignment_id FROM per_all_people_f papf, per_all_assignments_f paaf WHERE papf.person_id = paaf.person_id AND paaf.person_id = NVL(:P_PERSON_ID, paaf.person_id) AND PAPF.BUSINESS_GROUP_ID = NVL(:P_BUS_ID, PAPF.BUSINESS_GROUP_ID) AND months_between((:P_START_D), (date_of_birth))/12 < 64 AND months_between((:P_END_D), (date_of_birth))/12 >= 64 AND SYSDATE BETWEEN papf.effective_start_date AND papf.effective_end_date AND SYSDATE BETWEEN paaf.effective_start_date AND paaf.effective_end_date