On 20 Dec 2012 08:58, Gqcy wrote:
do I need a UDF to get the 6 position character dates and
times into a recognizable format?
A UDF is not /required/ to effect that. Although using UDFs can
certainly be a nicer way to accomplish that goal than other means; at
least for an impromptu query request. However for a specific physical
file format [e.g. QLIDOBJD for QADSPOBJ as the model output file or
"System supplied outfile for DSPOBJD"], I would probably create a VIEW
definition or a PROCEDURE to use instead, thus diminishing the value of
a having UDF versus repeated expressions. Of course the source for a
VIEW or a RESULT SET from a PROCEDURE can similarly benefit, most
obviously for readability, from using a UDF over the use of repeated
expressions.
Does "recognizable format" imply merely the presentation versus a
desire for actual conversion into DATE data type values? If merely for
presentation, then the following expression is probably sufficient; even
acceptable for the "Display date" column if the DSPOBJD had run with
DATFMT(*MDY) for the job, and even for /blank dates/ which would be
presented as the non-delimited string value " / / ":
insert( insert(odldat, 5, 0, '/'), 3, 0, '/')
Or similarly for time values, the expression:
insert( insert(odltim, 5, 0, ':'), 3, 0, ':')
The following query is much /nicer/ for its use of User Defined
Functions versus repeated expressions, irrespective of where the SQL
SELECT is coded; e.g. in a VIEW, impromptu, or a PROCEDURE:
SELECT odlbnm
, odobnm
, odobtp
, objd_ts( ODCCEN, ODCDAT, ODCTIM ) as odcdattim
, objd_ts( ODSCEN, ODSDAT, ODSTIM ) as odsdattim
, objd_ts( ODRCEN, ODRDAT, ODRTIM ) as odrdattim
, objd_ts( ODLCEN, ODLDAT, ODLTIM ) as odldattim
, objd_dt( ODUCEN, ODUDAT ) as odudat
, objd_dt( ODTCEN, ODTDAT ) as odtdat
, objd_ts( ODACEN, ODADAT, ODATIM ) as odadattim
FROM qtemp/od /* from: dspobjd &l/&o &t *full outfile(qtemp/od) */
Note: many of the stored date values for objects [from the OIR] can,
unfortunately, have invalid leap day years due to the [IMO poor]
implementation of the QLEAPADJ "Leap year adjustment" feature. For this
unlikely possibility [outside of locales using "Era dates"], one could
code some specific logic to review for each occurrence of
LEFT(mmddyy_value,4)='0229' and then /adjust/ the value to be a valid date.
As an Amazon Associate we earn from qualifying purchases.