28
1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

Embed Size (px)

Citation preview

Page 1: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

1

That’s Not a Date-Time Datatype, Is It?

Renee Teatro

Information Builders

Information Builders Summit 2006 User Conference

April 2006

Page 2: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

2

Author: Renee Teatro Company: Information Builders Presentation Title: That’s Not a Date-Time Datatype,Is It? Presentation Abstract: Discover all you ever wanted to know

about the new Date-Time datatype and the available subroutines for manipulating it.

Presentation Information

Page 3: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

3

Date-Time Datatype OverviewDate-Time Subroutines OverviewTechniques and Examples

Retrieval of System Date and Time Difference in HH:MM:SS between Date-Time fields Displaying BOTLOG START_STAMP and

END_STAMP values as proper Date-Time fields

That’s Not a Date-Time Datatype, Is It? Agenda

Page 4: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

4

Date-Time Datatype Overview

4Copyright © 2004 Information Builders, Inc.

Page 5: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

5

That’s Not a Date-Time Datatype, Is It? USAGE=HnnNumeric date-time value without date-time display optionsAppropriate for FORMAT ALPHA or transaction files “nn” – length from 1 to 20

8 characters for the dateYYYYMMDD

9 characters for the time up to millisecondsHHMMSSsss

12 characters for the time up to microsecondsHHMMSSsssmmm

No spaces, decimal points, or separator charactersTime must use the 24-hour system 19991231225725333444 => 1999/12/31 10:57:25.333444PM

Page 6: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

6

That’s Not a Date-Time Datatype, Is It? USAGE=Htimefmt1

Page 7: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

7

That’s Not a Date-Time Datatype, Is It? USAGE=Hdatefmt [separator] [timefmt2]

Page 8: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

8

That’s Not a Date-Time Datatype, Is It? USAGE=Hdatefmt [separator] [timefmt2]Supported datefmt combinations

Year-first: Y, YY, YM, YYM, YMD, YYMD Month-first: M, MD, MY, MYY, MDY, MDYY Day-first: D, DM, DMY, DMYY

Default separator for datefmt components: Slash (/)Period (.)Hyphen (-)Blank (B)None (N)

timefmt2 support at most two characters One character to represent all time components displayed Optional character to AM/PM option

Page 9: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

9

That’s Not a Date-Time Datatype, Is It? USAGE=Hdatefmt [separator] [timefmt2]

Page 10: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

10

That’s Not a Date-Time Datatype, Is It?ACTUAL FormatsACTUAL=H8, H10, or H12

Binary HOLD or SAVB format filesACTUAL=Ann

Alphanumeric HOLD or SAVE format files USAGE=Hnn

Relational – SQL engine SET DATETIME ON/OFF *** Oracle

RDBMS Data type of DATE: ACTUAL=HYYMDS DB2 and SQL/DS

RDBMS Data type of DATE: ACTUAL=DATERDBMS Data type of TIME: ACTUAL=HHISRDBMS Data type of TIMESTAMP: ACTUAL=HYYMDm

Page 11: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

11

That’s Not a Date-Time Datatype, Is It? Examples

FILENAME=EMPINFO ,SUFFIX=SQLDS,$ SEGNAME=EMPINFO ,SEGTYPE=S0,$ FIELD=EMP_ID ,ALIAS=EID ,USAGE=A9 ,ACTUAL=A9 ,$ FIELD=LAST_NAME ,ALIAS=LN ,USAGE=A15 ,ACTUAL=A15 ,$ FIELD=FIRST_NAME ,ALIAS=FN ,USAGE=A10 ,ACTUAL=A10 ,$ FIELD=HIRE_DATE ,ALIAS=HDT ,USAGE=YMD ,ACTUAL=DATE ,$ FIELD=HIRE_DATE_TIME ,ALIAS=HDTT ,USAGE=HYYMDm ,ACTUAL=HYYMDm ,$ FIELD=HIRE_TIME ,ALIAS=HT ,USAGE=HHIS ,ACTUAL=HHIS ,$

FILE=DATETIME, SUFFIX=FOC ,$ SEGNAME=DATETIME, SEGTYPE=S1 ,$ FIELD=ID, ID, USAGE=I2 ,$ FIELD=DT1, DT1, USAGE=HYYMDS, MISSING=ON,$

FILE=DTCOM, SUFFIX=COM ,$ SEGNAME=DTCOM, SEGTYPE=S0 ,$ FIELD=ID, ID, USAGE=I2 ,ACTUAL=A2,$ FIELD=DT1, DT1, USAGE=HYYMDS ,ACTUAL=A17,$ $FIELD=DT1, DT1, USAGE=HYYMDs ,ACTUAL=A17,$ $FIELD=DT1, DT1, USAGE=HMTdYYSA ,ACTUAL=A28,$

* * * TOP OF FILE * * * 01, 20000101 02:57:25,$ 02, 19991231 14:05:35,$ * * * END OF FILE * * *

Page 12: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

12

Date-Time Subroutines Overview

12Copyright © 2004 Information Builders, Inc.

Page 13: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

13

That’s Not a Date-Time Datatype, Is It? HGETC

Return the current date and time in date-time format

HGETC({8|10},'Hformat')

DEFINE FILE CAR CURRENT_DATE/YYMD WITH COUNTRY=&YYMD; CURRENT_DATE2/YY-M-D WITH COUNTRY=&YYMD; CURRENT_DATE3/HYYMD= HGETC(8,'HYYMD'); CURRENT_DATE4/HYYMD-= HGETC(8,'HYYMD-'); CURRENT_DATE5/HYYMD.= HGETC(8,'HYYMD.'); CURRENT_DATE6/HYYMDB= HGETC(8,'HYYMDB'); CURRENT_DATE7/HYYMDN= HGETC(8,'HYYMDN'); CURRENT_DATE8/HMTDYY= HGETC(8,'HMTDYY'); CURRENT_DATE9/HMTDkYY= HGETC(8,'HMTDkYY'); CURRENT_DATE10/HMtDkYY= HGETC(8,'HMtDkYY'); CURRENT_TIME/A8 ='&TOD'; CURRENT_TIME1/A8 =HHMMSS('A8'); CURRENT_TIME2/HHISA= HGETC(8,'HHISA'); CURRENT_TIME3/HHISa= HGETC(8,'HHISa'); CUR_DATE_TIME/HYYMDI=HGETC(8,'HYYMDI'); CUR_DATE_TIME2/HYYMDS=HGETC(8,'HYYMDS'); CUR_DATE_TIME3/HYYMDsA=HGETC(8,'HYYMDsA'); CUR_DATE_TIME4/HYYMDma=HGETC(10,'HYYMDma');

Page 14: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

14

That’s Not a Date-Time Datatype, Is It? HGETC

This is the DATE via the YYMD VARIABLE: 2004/05/11 This is the DATE via the YYMD VARIABLE using - SEPARATOR: 2004-05-11 This is the HGETC DATE via a DEFINE: 2004/05/11 This is the HGETC DATE via a DEFINE: 2004-05-11 This is the HGETC DATE via a DEFINE: 2004.05.11 This is the HGETC DATE via a DEFINE: 2004 05 11 This is the HGETC DATE via a DEFINE: 20040511 This is the HGETC DATE via a DEFINE: May 11 2004 This is the HGETC DATE via a DEFINE: May 11, 2004 This is the HGETC DATE via a DEFINE: May 11, 2004 This is the TOD TIME using the VARIABLE directly: 21.14.05 This is the TOD TIME using the VARIABLE via a DEFINE: 21.14.05 This is the HHMMSS TIME via a DEFINE: 23.25.32 This is the HGETC TIME via a DEFINE with UPCASE AM/PM: 11:25:32PM This is the HGETC TIME via a DEFINE with lowcase am/pm: 11:25:32pm This is the HGETC DATE-TIME up to MINUTE COMPONENT: 2004/05/11 23:25 This is the HGETC DATE-TIME up to SECOND COMPONENT: 2004/05/11 23:25:32 This is the HGETC DATE-TIME up to MILLISECOND/UPCASE AM/PM: 2004/05/11 11:25:32.000PMThis is the HGETC DATE-TIME up to MICROSECOND/lowcase am/pm: 2004/05/11 11:25:32.000000pm

Page 15: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

15

That’s Not a Date-Time Datatype, Is It? HINPUT and HDIFF

Convert an alphanumeric string to a date-time value

HINPUT(inputlength,'inputstring',{8|10},'Hfmt')

HDIFF(dtfield1,dtfield2,'component','Dformat')

Returns the number of units of a specific date-time component between two date-time values

Page 16: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

16

That’s Not a Date-Time Datatype, Is It? Date-Time Subroutine Components

Page 17: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

17

That’s Not a Date-Time Datatype, Is It? HINPUT and HDIFF

DEFINE FUNCTION SDIFF/A8 (IDT/A8,ITM/A6,ODT/A8,OTM/A6) ADATE1/A14 = IDT | ITM; ADATE2/A14 = ODT | OTM; HDATE1/HYYMDS = HINPUT(14, ADATE1, 8, 'HYYMDS'); HDATE2/HYYMDS = HINPUT(14, ADATE2, 8, 'HYYMDS'); HDIFF/D12.2 = HDIFF (HDATE2, HDATE1, 'SECOND', 'D12'); HOURS/I2 = INT(HDIFF / 3600); MINS/I2 = (HDIFF - (HOURS * 3600)) / 60; SECS/I2 = HDIFF - (HOURS * 3600) - (MINS * 60); SDIFF/A8 = EDIT(HOURS) | ':' | EDIT(MINS) | ':' | EDIT(SECS); END DEFINE FILE CAR SECDIFF/A8=SDIFF('20030301','081003','20030301','081005'); END …

Page 18: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

18

That’s Not a Date-Time Datatype, Is It? HINPUT and HDIFF

ODATE 20030301 OTIME 081005 IDATE 20030301 ITIME 081003 SECDIFF 00:00:02 ODATE 20030301 OTIME 081203 IDATE 20030301 ITIME 081003 SECDIFF 00:02:00 ODATE 20030301 OTIME 091003 IDATE 20030301 ITIME 081003 SECDIFF 01:00:00 ODATE 20030301 OTIME 091205 IDATE 20030301 ITIME 081003 SECDIFF 01:02:02

Page 19: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

19

That’s Not a Date-Time Datatype, Is It? HADD

Increments date-time value by a specified number of units

HADD(dtfield,'component',increment,{8 | 10},'Hformat')

DEFINE FILE CAR TRANDATE/HYYMDI= HINPUT (12, '200202111221', 8, 'HYYMDI'); INCDATE/HYYMDI= HADD(TRANDATE, 'MINUTE', 100, 8, 'HYYMDI'); DECDATE/HYYMDI= HADD(TRANDATE, 'MINUTE', -100, 8, 'HYYMDI'); END TABLE FILE CAR PRINT TRANDATE INCDATE DECDATE BY COUNTRY IF COUNTRY EQ 'ENGLAND' END

COUNTRY TRANDATE INCDATE DECDATE ------- -------- ------- ------- ENGLAND 2002/02/11 12:21 2002/02/11 14:01 2002/02/11 10:41

Page 20: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

20

That’s Not a Date-Time Datatype, Is It? HDTTM

Convert date field to a date-time field with time set to midnight

HDTTM(datefield,{8|10},Hformat)

DEFINE FILE BOTLOGBOT_START/D14=EDIT(START_STAMP);BOT_END/D14=EDIT(END_STAMP);BASE_DATE/YYMD=19700101;HBASE_DATE/HYYMDIA=HDTTM(BASE_DATE,8,'HYYMDIA');BOTLOG_START/HYYMDS= HADD(HBASE_DATE,'MILLISECONDS',BOT_START,8,'HYYMDS'); BOTLOG_END/HYYMDS= HADD(HBASE_DATE,'MILLISECONDS',BOT_END,8,'HYYMDS');END BOT_START BOT_END BASE_DATE HBASE_DATE

--------- ------- --------- ---------- 1,052,031,303,000 1,052,031,305,514 1970/01/01 1970/01/01 12:00AM 1,052,708,103,000 1,052,708,106,036 1970/01/01 1970/01/01 12:00AM

BOTLOG_START BOTLOG_END ------------ ---------- 2003/05/04 06:55:03 2003/05/04 06:55:05 2003/05/12 02:55:03 2003/05/12 02:55:06

Page 21: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

21

That’s Not a Date-Time Datatype, Is It? HNAME

Extracts specified components of a date-time value and converts them to alphanumeric format

HNAME(dtfield,'component',Aformat)

SET WEEKFIRST=7 SET DATEFORMAT=DMY DEFINE FILE CAR TRANDATE/HYYMDS= HINPUT(19, '01/05/2004 15:31:25', 8, 'HYYMDS'); WEEK_COMPONENT/A2= HNAME(TRANDATE, 'WEEK', 'A2'); DAY_COMPONENT/A2= HNAME(TRANDATE, 'DAY', 'A2'); END

COUNTRY TRANDATE WEEK_COMPONENT DAY_COMPONENT ------- -------- -------------- ------------- ENGLAND 2004/05/01 15:31:25 18 01

SET DATEFORMAT=MDY

ENGLAND 2004/01/05 15:31:25 01 05

Page 22: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

22

That’s Not a Date-Time Datatype, Is It? HPART

Extracts a component of a date-time value in numeric format

HPART(dtfield,'component','Iformat')

SET WEEKFIRST=7 SET DATEFORMAT=DMY DEFINE FILE CAR TRANDATE/HYYMDS= HINPUT(19, '01/05/2004 15:31:25', 8, 'HYYMDS'); WEEK_COMPONENT/I2= HPART(TRANDATE, 'WEEK', 'I2'); MONTH_COMPONENT/I2= HPART(TRANDATE, 'MONTH', 'I2'); END

COUNTRY TRANDATE WEEK_COMPONENT MONTH_COMPONENT ------- -------- -------------- --------------- ENGLAND 2004/05/01 15:31:25 18 5

SET DATEFORMAT=MDY

ENGLAND 2004/01/05 15:31:25 1 1

Page 23: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

23

That’s Not a Date-Time Datatype, Is It? HSETPT

Insert numeric value of specified component in date-time field

HSETPT(dtfield,'component',value,{8|10},'Hformat')

DEFINE FILE CAR TRANDATE/HYYMDm= HINPUT(20, '20040105153125123456', 10, 'HYYMDm'); SETPT1/HYYMDm= HSETPT(TRANDATE,'DAY',15,10,'HYYMDm'); SETPT2/HYYMDmA= HSETPT(TRANDATE,'MONTH',12,10,'HYYMDmA'); END

TRANDATE SETPT1 -------- ------ 2004/01/05 15:31:25.123456 2004/01/15 15:31:25.123456

SETPT2 ------ 2004/12/05 3:31:25.123456PM

Page 24: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

24

That’s Not a Date-Time Datatype, Is It? HCNVRT

Converts date-time value to alphanumeric format

HCNVRT(dtfield,'(Hfmt)',rlength,'Ann')

DEFINE FILE CAR TRANDATE/HYYMDm= HINPUT(20, '20040105153125123456', 10, 'HYYMDm'); CNVRT1/A26= HCNVRT(TRANDATE,'(HYYMDm)',26,'A26'); CNVRT2/A20= HCNVRT(TRANDATE,'(H20)',20,'A20'); CNVRT3/A18= HCNVRT(TRANDATE,'(HMTdkYY)',18,'A18'); END

TRANDATE CNVRT1 -------- ------ 2004/01/05 15:31:25.123456 2004/01/05 15:31:25.123456

CNVRT2 CNVRT3 ------ ------ 20040105153125123456 January 5, 2004

Page 25: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

25

That’s Not a Date-Time Datatype, Is It? HMIDNT

Changes the time portion of a date-time field to midnight

HMIDNT(dtfield,{8|10},'Hformat')

DEFINE FILE CAR TRANDATE/HYYMDm= HINPUT(20, '20040105153125123456', 10, 'HYYMDm'); MIDNT1/HYYMDm= HMIDNT(TRANDATE,10,'HYYMDm'); MIDNT2/HYYMDmA= HMIDNT(TRANDATE,10,'HYYMDmA'); END

TRANDATE MIDNT1 -------- ------ 2004/01/05 15:31:25.123456 2004/01/05 00:00:00.000000

MIDNT2 ------ 2004/01/05 12:00:00.000000AM

Page 26: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

26

That’s Not a Date-Time Datatype, Is It? HDATE

Extract date components from a date-time field and convert them to a date field

HDATE(dtfield,'dateformat')

DEFINE FILE CAR TRANDATE/HYYMDm= HINPUT(20, '20040105153125123456', 10, 'HYYMDm'); SMARTDATE/M-D-YY= HDATE(TRANDATE,'M-D-YY'); END

COUNTRY TRANDATE SMARTDATE ------- -------- --------- ENGLAND 2004/01/05 15:31:25.123456 01-05-2004

Page 27: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

27

That’s Not a Date-Time Datatype, Is It? HTIME

Extract all of the time components from a date-time field and convert them to a number of milliseconds or microseconds in numeric format

HTIME({8|10},dtfield,'Dformat')

DEFINE FILE CAR TRANDATE/HYYMDm= HINPUT(20, '20040105153125123456', 10, 'HYYMDm'); MILLISEC/D14= HTIME(8,TRANDATE,'D14'); MICROSEC/D14= HTIME(10,TRANDATE,'D14'); END

COUNTRY TRANDATE MILLISEC MICROSEC ------- -------- -------- -------- ENGLAND 2004/01/05 15:31:25.123456 55,885,123 55,885,123,456

Page 28: 1 That’s Not a Date-Time Datatype, Is It? Renee Teatro Information Builders Information Builders Summit 2006 User Conference April 2006

2828Copyright © 2004 Information Builders, Inc.