In FOCUS Since 1983 ~ from FOCUS to WebFOCUS. Current: WebFOCUS Administrator at FIS Worldpay | 8204, 8206 |
Can you share it?quote:a SQL Proc and call it from WebFOCUS
In FOCUS since 1986 | WebFOCUS Server 8.2.01M, thru 8.2.07 on Windows Svr 2008 R2 | ||
WebFOCUS App Studio 8.2.06 standalone on Windows 10 |
DEFINE FUNCTION HTIMEDIF(ENDTIME/HYYMDs, BEGTIME/HYYMDs) DT_NULL/HYYMDs = HINPUT(14, '00010101000000000', 8, 'HHIS'); HTIMEDIF/HYYMDs = HADD(DT_NULL, 'MILLISECONDS',HDIFF(ENDTIME, BEGTIME, 'MILLISECONDS', 'D12.2'), 8, 'HYYMDs'); END -* Display Elapsed time with zero padding removed DEFINE FUNCTION HTIMEDFA(ENDTIME/HYYMDs, BEGTIME/HYYMDs) DT_NULL/HYYMDs = HINPUT(14, '00010101000000000', 8, 'HYYMDs'); HTIMEDIF/HYYMDs = HADD(DT_NULL, 'MILLISECONDS',HDIFF(ENDTIME, BEGTIME, 'MILLISECONDS', 'D12.2'), 8, 'HYYMDs'); HRI /I2 =HPART(HTIMEDIF,'hh','I2'); MNI /I2 =HPART(HTIMEDIF,'mi','I2'); SCI /I2 =HPART(HTIMEDIF,'ss','I2'); MSI /I3 =HPART(HTIMEDIF,'ms','I3'); HRA /A3 =IF HRI EQ 0 THEN '' ELSE FPRINT(HRI,'I2','A2')||':'; MNA /A3 =IF HRI+MNI EQ 0 THEN '' ELSE FPRINT(MNI,'I2','A2')||':'; SCA /A3 =IF HRI+MNI+SCI EQ 0 THEN '' ELSE FPRINT(SCI,'I2','A2'); MSA /A4 =IF HRI+MNI+SCI+MSI EQ 0 THEN '0' ELSE '.'||EDIT(MSI) ; HTIMEDFA/A12=STRIP(13,HRA||MNA||SCA||MSA,' ','A12'); END DEFINE FILE CAR BEG_TIME/HYYMDs = HINPUT(23, '2014-12-01 06:25:23.345', 8, 'HYYMDs'); END_TIME/HYYMDs = HINPUT(23, '2014-12-01 11:55:43.345', 8, 'HYYMDs'); END TABLE FILE CAR SUM BEG_TIME END_TIME COMPUTE C_DIFF1/A12 = FPRINT(HTIMEDIF(END_TIME, BEG_TIME),'HHISs','A12'); AS 'Elapsed' COMPUTE C_DIFF2/A12 = HTIMEDFA(END_TIME, BEG_TIME); AS 'Elapsed' BY COUNTRY AS '' -*WHERE COUNTRY EQ 'ENGLAND' ON TABLE SET PAGE NOLEAD ON TABLE SUBTOTAL ON TABLE SET STYLE * TYPE=DATA,JUSTIFY=RIGHT,$ ENDSTYLE ENDwhich gives these results
BEG_TIME END_TIME Elapsed ENGLAND 2014/12/01 06:25:23.345 2014/12/01 11:55:43.345 5:30:20.000 FRANCE 2014/12/01 06:25:23.345 2014/12/01 11:55:43.345 5:30:20.000 ITALY 2014/12/01 06:25:23.345 2014/12/01 11:55:43.345 5:30:20.000 JAPAN 2014/12/01 06:25:23.345 2014/12/01 11:55:43.345 5:30:20.000 W GERMANY 2014/12/01 06:25:23.345 2014/12/01 11:55:43.345 5:30:20.000 TOTAL (NO TOTALS)
ENGLAND 2014/12/01 06:25:23.345 2014/12/01 11:55:43.345 05:30:20 FRANCE 2014/12/01 06:25:23.345 2014/12/01 11:55:43.345 05:30:20 ITALY 2014/12/01 06:25:23.345 2014/12/01 11:55:43.345 05:30:20 JAPAN 2014/12/01 06:25:23.345 2014/12/01 11:55:43.345 05:30:20 W GERMANY 2014/12/01 06:25:23.345 2014/12/01 11:55:43.345 05:30:20 TOTAL 27:31:00
quote:Can you share it?
WITH ex_table AS ( SELECT '2007-01-01' 'birthdatetime', '2009-03-29' 'visitdatetime') SELECT CAST(DATEDIFF(yy, t.birthdatetime, t.visitdatetime) AS VARCHAR(4)) +' year '+ CAST(DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, t.birthdatetime, t.visitdatetime), t.birthdatetime), t.visitdatetime) AS VARCHAR(2)) +' month '+ CAST(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, t.birthdatetime, t.visitdatetime), t.birthdatetime), t.visitdatetime), DATEADD(yy, DATEDIFF(yy, t.birthdatetime, t.visitdatetime), t.birthdatetime)), t.visitdatetime) AS VARCHAR(2)) +' day' AS result FROM ex_table t
2 year 2 month 28 day
DEFINE FUNCTION TIMEDIFF (BEGTIME/A8 ,ENDTIME/A8) . . . ENDI'll use this as the basis of the NFR to standardize it.
DEFINE FUNCTION HTIMEDIF(ENDTIME/HYYMDs, BEGTIME/HYYMDs) DT_NULL/HYYMDs = HINPUT(14, '00010101000000000', 8, 'HHIS'); HTIMEDIF/HYYMDs = HADD(DT_NULL, 'MILLISECONDS',HDIFF(ENDTIME, BEGTIME, 'MILLISECONDS', 'D12.2'), 8, 'HYYMDs'); END DEFINE FILE CAR BEG_TIME/HYYMDs = HINPUT(23, '2014-12-01 06:25:23.345', 8, 'HYYMDs'); END_TIME/HYYMDs = HINPUT(23, '2014-12-01 11:55:43.345', 8, 'HYYMDs'); END TABLE FILE CAR SUM BEG_TIME END_TIME COMPUTE C_DIFF/D12 = HTIME(8, HTIMEDIF(END_TIME, BEG_TIME), 'D12'); COMPUTE DT_BASE/HYYMDs = HINPUT(14, '00010101000000000', 8, 'HYYMDs'); COMPUTE HTIMEDIF/HYYMDs = HADD(DT_BASE, 'MILLISECONDS',C_DIFF, 8, 'HYYMDs'); COMPUTE DDI /I2 = HPART(HTIMEDIF,'dd','I2')-1; COMPUTE HRI /I2 = HPART(HTIMEDIF,'hh','I2'); COMPUTE MNI /I2 = HPART(HTIMEDIF,'mi','I2'); COMPUTE SCI /I2 = HPART(HTIMEDIF,'ss','I2'); COMPUTE MSI /I3 = HPART(HTIMEDIF,'ms','I3'); FOR COUNTRY 'ENGLAND' LABEL L1 OVER 'FRANCE' LABEL L2 OVER 'ITALY' LABEL L3 OVER 'JAPAN' LABEL L4 OVER 'W GERMANY' LABEL L5 OVER 'TOTALS' LABEL L6 OVER RECAP L6(3) = L1(3) + L2(3) + L3(3) + L4(3) + L5(3); OVER RECAP L6(4) = L5(4); OVER RECAP L6(5) = HADD(L6(4), 'MILLISECONDS',L6(3), 8, 'HYYMDs'); OVER RECAP L6(6) = HPART(L6(5),'dd','I2') - 1; OVER RECAP L6(7) = HPART(L6(5),'hh','I2') + (L6(6) * 24); OVER RECAP L6(8) = HPART(L6(5),'mi','I2'); OVER RECAP L6(9) = HPART(L6(5),'ss','I2'); OVER RECAP L6(10) = HPART(L6(5),'ms','I2'); ON TABLE HOLD AS TEMPHLD1 END -RUN DEFINE FILE TEMPHLD1 HRA /A3 = IF HRI EQ 0 THEN '' ELSE FPRINT(HRI,'I2','A2')||':'; MNA /A3 = IF HRI+MNI EQ 0 THEN '' ELSE FPRINT(MNI,'I2','A2')||':'; SCA /A3 = IF HRI+MNI+SCI EQ 0 THEN '' ELSE FPRINT(SCI,'I2','A2'); MSA /A4 = IF HRI+MNI+SCI+MSI EQ 0 THEN '0' ELSE '.'||EDIT(MSI) ; HTIMEDFA/A12 = STRIP(13,HRA||MNA||SCA||MSA,' ','A12'); END TABLE FILE TEMPHLD1 PRINT BEG_TIME END_TIME HTIMEDFA AS 'Elapsed' BY E01 AS COUNTRY ROWS 'ENGLAND' OVER 'FRANCE' OVER 'ITALY' OVER 'JAPAN' OVER 'W GERMANY' OVER 'TOTALS' ON TABLE SET PAGE NOLEAD ON TABLE SET STYLE * TYPE=DATA,JUSTIFY=RIGHT,$ ENDSTYLE END -RUN
In FOCUS since 1986 | WebFOCUS Server 8.2.01M, thru 8.2.07 on Windows Svr 2008 R2 | ||
WebFOCUS App Studio 8.2.06 standalone on Windows 10 |
COUNTRY BEG_TIME END_TIME Elapsed ENGLAND 2014/12/01 06:25:23.345 2014/12/01 11:55:43.345 5:30:20.000 FRANCE 2014/12/01 06:25:23.345 2014/12/01 11:55:43.345 5:30:20.000 ITALY 2014/12/01 06:25:23.345 2014/12/01 11:55:43.345 5:30:20.000 JAPAN 2014/12/01 06:25:23.345 2014/12/01 11:55:43.345 5:30:20.000 W GERMANY 2014/12/01 06:25:23.345 2014/12/01 11:55:43.345 5:30:20.000 TOTALS 27:31:40.000
In FOCUS since 1986 | WebFOCUS Server 8.2.01M, thru 8.2.07 on Windows Svr 2008 R2 | ||
WebFOCUS App Studio 8.2.06 standalone on Windows 10 |