2017-08-14 3 views
-3

Ich muss alle Mitarbeiter, deren Alter 64 sein wird zwischen zwei Daten, die ich angeben. Jede Hilfe wäre willkommen.Alter zwischen zwei Daten

Was ich versucht habe, ist:

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

Was haben Sie bisher versucht? – JohnHC

+0

Hinzufügen von Tabellendefinitionen, Beispieltabellendaten und das erwartete Ergebnis (beide als formatierter Text). – jarlh

+1

@EmileArab, Bitte bearbeiten Sie Ihre Frage und teilen Sie alle von jarlh angegebenen Daten mit der Abfrage. – zarruq

Antwort

-1

Da Ihre Abfrage von Oracle, bitte versuchen Sie es dieses:

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

Try this: -

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

Ich versuchte dies und es hat funktioniert:

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