In Dec., an accountant wanted to refer to the age of his client. To
accurately show the age of anyone on a given date, the precise determination
of leap year comes into play. A Stored proc was created of the following:
Procedure : sp_age
Description :
ID : 3
Last Modified: December 13, 2001 6:17 PM
Version : 1
Parameter Name Parameter Attributes
-------------------- -----------------------------------------------------
----
vdatein Type : DATE
Procedure has 1 parameters.
Return Value: Type : INTEGER
The Code of the Procedure is this:
--Begin Code:
*(spAge mod 121301 mbyerley)
*(returns int years)
CLEAR VAR MICRORIM_RETURN,stp_return,vage,vagedays,vageyr, +
vlp,vthisdays,vthisyr,vyr
SET VAR vdatein DATE
SET VAR vage INTEGER = NULL
IF vdatein IS NULL THEN
SET VAR vage = 0
ELSE
SET VAR vthisyr INTEGER = (INT((SGET((CTXT((JDATE(.#DATE)))),4,1))))
SET VAR vthisdays INTEGER = (INT((SGET((CTXT((JDATE(.#DATE)))),3,5))))
SET VAR vageyr INTEGER = (INT((SGET((CTXT((JDATE(.vdatein)))),4,1))))
SET VAR vagedays INTEGER = (INT((SGET((CTXT((JDATE(.vdatein)))),3,5))))
-- check for leap year
SET VAR vyr = (IYR(.vdatein))
SET VAR vlp INTEGER = NULL
IF ((MOD(.vyr,4)) = 0 AND (MOD(.vyr,100)) <> 0) +
OR (MOD(.vyr,400)) = 0 THEN
-- True
SET VAR vlp = 1
ELSE
-- False
SET VAR vlp = 0
ENDIF
SET VAR vagedays = (.vagedays - .vlp)
-- dayofyear is < birthday age is year minus birthyear minus 1
IF vthisdays < .vagedays THEN
SET VAR vage = ((.vthisyr - 1) - .vageyr)
-- dayofyear is after or on birthday age is year minus birthyear
ELSE
--dayofyear is on birthday or after age is year minus birthyear
SET VAR vage = (.vthisyr - .vageyr)
ENDIF
ENDIF
CLEAR VAR vagedays,vageyr,vdatein,vlp,vthisdays,vthisyr,vyr
RETURN .vage
--End Code:
It is called by the following:
The Var vDateIN is set as a Date DataType to the Birthdate
Set Var vDateIN date = 04/17/1944
Then:
Set Var vAge = (call Sp_Age(.vDateIn))
Var vAge is returned properly.....
================================================
TO SEE MESSAGE POSTING GUIDELINES:
Send a plain text email to [EMAIL PROTECTED]
In the message body, put just two words: INTRO rbase-l
================================================
TO UNSUBSCRIBE: send a plain text email to [EMAIL PROTECTED]
In the message body, put just two words: UNSUBSCRIBE rbase-l
================================================
TO SEARCH ARCHIVES:
http://www.mail-archive.com/rbase-l%40sonetmail.com/