Greetings,
I need to find out all exams that concluded over 72 hours ago but for which final grades have not been posted. The relevant data in 2 columns are Exam Date (DATE) & Exam_End_Time (VARCHAR2 (11 Char)).
I am trying to figure out two things - first, logic that will allow me to capture all exams that concluded over 72 hours ago from current time and second how to display this time in hours. Currently I am hard coding my time difference logic (trunc (B.SYEXAMS_EXAM_DATE) < trunc (To_date (‘03/06/2016’, ‘DD/MM/YYYY’))). I would like to make this logic dynamic where my script would calculate time based on sysdate.
My display logic does not give me 100% accurate answer either. My display logic is as follows:
round(uos_f_time_diff_in_seconds (to_date(to_char(decode(B.SYEXAMS_EXAM_DATE,null,sysdate,B.SYEXAMS_EXAM_DATE),‘DD-MM-YYYY’)||’ '||substr(B.SYEXAMS_TIME_TO, 1,
length(SYEXAMS_TIME_TO)-2),‘DD-MM-YYYY HH:MI:SS’) ,sysdate)/3600,0) HOURS_PASSED,
Any assistance provided would be appreciated.
My current script is as follows:
…
select A.SFRSTCR_TERM_CODE TERM,
C.SSBSECT_SUBJ_CODE||C.SSBSECT_CRSE_NUMB CRSE_NUM,
A.SFRSTCR_CRN CRN,
C.SSBSECT_SEQ_NUMB SEC,
D.SCBCRSE_TITLE COURSE_TITLE,
C.SSBSECT_SCHD_CODE TYPE,
A.SFRSTCR_CAMP_CODE CAMP,
E.STVCOLL_DESC COLLEGE,
C.SSBSECT_ENRL ENRL,
count (distinct A.SFRSTCR_PIDM) NO_GRADE,
B.SYEXAMS_EXAM_DATE EXAM_DATE,
B.SYEXAMS_TIME_FROM START_TIME,
B.SYEXAMS_TIME_TO END_TIME,
–trunc(sysdate) - trunc(To_Date (B.SYEXAMS_EXAM_DATE)) DAYS_PASSED,
round(uos_f_time_diff_in_seconds (to_date(to_char(decode(B.SYEXAMS_EXAM_DATE,null,sysdate,B.SYEXAMS_EXAM_DATE),‘DD-MM-YYYY’)||’ '||substr(B.SYEXAMS_TIME_TO, 1,
length(SYEXAMS_TIME_TO)-2),‘DD-MM-YYYY HH:MI:SS’) ,sysdate)/3600,0) HOURS_PASSED,
UCS_PKG.GET_PIDM_ID(F.SIRASGN_PIDM) INSTR_ID,
G.SPRIDEN_FIRST_NAME||’ '||G.SPRIDEN_LAST_NAME INSTR_NAME,
H.GOREMAL_EMAIL_ADDRESS INSTR_EMAIL_ADDRESS
from SFRSTCR A, SYEXAMS B, SSBSECT C, SCBCRSE D, STVCOLL E, SIRASGN F, SPRIDEN G, GOREMAL H
where A.SFRSTCR_TERM_CODE = B.SYEXAMS_TERM_CODE
and A.SFRSTCR_TERM_CODE = C.SSBSECT_TERM_CODE
and A.SFRSTCR_CRN = B.SYEXAMS_CRN
and A.SFRSTCR_CRN = C.SSBSECT_CRN
and trunc (B.SYEXAMS_EXAM_DATE) < trunc (To_date (‘03/06/2016’, ‘DD/MM/YYYY’))
and A.SFRSTCR_RSTS_CODE in (‘RE’, ‘RW’, ‘RF’)
and A.SFRSTCR_GRDE_CODE is null
and A.SFRSTCR_TERM_CODE = ‘201520’
and C.SSBSECT_SUBJ_CODE = D.SCBCRSE_SUBJ_CODE
and C.SSBSECT_CRSE_NUMB = D.SCBCRSE_CRSE_NUMB
and D.SCBCRSE_EFF_TERM = (select max(E.SCBCRSE_EFF_TERM)
from SCBCRSE E
where D.SCBCRSE_SUBJ_CODE = E.SCBCRSE_SUBJ_CODE
and D.SCBCRSE_CRSE_NUMB = E.SCBCRSE_CRSE_NUMB
)
and D.SCBCRSE_COLL_CODE = E.STVCOLL_CODE(+)
and C.SSBSECT_TERM_CODE = F.SIRASGN_TERM_CODE
and C.SSBSECT_CRN = F.SIRASGN_CRN
and F.SIRASGN_PIDM = H.GOREMAL_PIDM(+)
and H.GOREMAL_EMAL_CODE = ‘20’
and H.GOREMAL_STATUS_IND = ‘A’
and F.SIRASGN_PIDM = G.SPRIDEN_PIDM
and G.SPRIDEN_CHANGE_IND is null
Group by A.SFRSTCR_TERM_CODE, C.SSBSECT_SUBJ_CODE||C.SSBSECT_CRSE_NUMB, A.SFRSTCR_CRN, C.SSBSECT_SEQ_NUMB, D.SCBCRSE_TITLE, C.SSBSECT_SCHD_CODE, E.STVCOLL_DESC, A.SFRSTCR_CAMP_CODE, C.SSBSECT_ENRL, B.SYEXAMS_EXAM_DATE, B.SYEXAMS_TIME_FROM, B.SYEXAMS_TIME_TO, UCS_PKG.GET_PIDM_ID(F.SIRASGN_PIDM),
G.SPRIDEN_FIRST_NAME||’ '||G.SPRIDEN_LAST_NAME, H.GOREMAL_EMAIL_ADDRESS,
round(uos_f_time_diff_in_seconds (to_date(to_char(decode(B.SYEXAMS_EXAM_DATE,NULL,sysdate,B.SYEXAMS_EXAM_DATE),‘DD-MM-YYYY’)||’ '||substr(B.SYEXAMS_TIME_TO, 1,
length(B.SYEXAMS_TIME_TO)-2),‘DD-MM-YYYY HH:MI:SS’) ,sysdate)/3600,0)
order by round(uos_f_time_diff_in_seconds (to_date(to_char(decode(B.SYEXAMS_EXAM_DATE,null,sysdate,B.SYEXAMS_EXAM_DATE),‘DD-MM-YYYY’)||’ '||substr(B.SYEXAMS_TIME_TO, 1,
length(B.SYEXAMS_TIME_TO)-2),‘DD-MM-YYYY HH:MI:SS’) ,sysdate)/3600,0) desc, H.GOREMAL_EMAIL_ADDRESS
;
…
Function
…
CREATE OR REPLACE FUNCTION UOSINST1.“UOS_F_TIME_DIFF_IN_SECONDS” (
DATE_1 IN DATE, DATE_2 IN DATE) RETURN NUMBER IS
NDATE_1 NUMBER;
NDATE_2 NUMBER;
NSECOND_1 NUMBER(10,5);
NSECOND_2 NUMBER(10,5);
– DATE_1 => START DATE
– DATE_2 => END DATE
BEGIN
IF DATE_2>DATE_1
THEN
– Get Julian date number from first date (DATE_1)
NDATE_1 := TO_NUMBER(TO_CHAR(DATE_1, ‘J’));
– Get Julian date number from second date (DATE_2)
NDATE_2 := TO_NUMBER(TO_CHAR(DATE_2, ‘J’));
– Get seconds since midnight from first date (DATE_1)
NSECOND_1 := TO_NUMBER(TO_CHAR(DATE_1, ‘SSSSS’));
– Get seconds since midnight from second date (DATE_2)
NSECOND_2 := TO_NUMBER(TO_CHAR(DATE_2, ‘SSSSS’));
RETURN (((NDATE_2 - NDATE_1) * 86400)+(NSECOND_2 - NSECOND_1));
ELSE RETURN 0;
END IF;
END uos_f_time_diff_in_seconds;
/
…