DATE

@DATE returns dates and times in a variety of formats to the target column based on the format passed into the source. @DATE converts virtually any type of input into a valid SQL date. @DATE can also be used to extract portions of a date field, or to compute a numeric timestamp field based on a date.

Syntax

@DATE ("output_descriptor", "input_descriptor", source_field
[, "input_descriptor", source_field] [, ...])

output_descriptor

A string containing date descriptors and optional literal values. For example, the descriptor YYYY corresponds to a four-digit year, the descriptor MI describes minutes, while spaces, colons or other literals are output as is. See “Date Descriptors” for descriptions.

input_descriptor

A string containing a series of date descriptors and optional literal values. For example, the descriptor YYYY corresponds to a four-digit year, the descriptor MI describes minutes. Date descriptors are strung together to describe the field or column that follows in the next parameter. See “Date Descriptors” for descriptions.

source_field

The name of a source field supplying the preceding input.

Date Descriptors

Descriptor Description
CC Century
YY Two-digit year
YYYY Four-digit year
MM Numeric month
MMM Alphanumeric month, such as APR, OCT
DD Numeric day of month
DDD Numeric day of the year, such as 001, or 365
DOW0 Numeric day of the week where Sunday = 0.
DOW1 Numeric day of the week where Sunday = 1.
DOWA Alphanumeric day of the week, such as SUN, MON, TUE
HH Hour
MI Minute
SS Seconds
JTSLCT

Use for a Julian timestamp that is already local time, or to keep local time when converting to a Julian timestamp.

An example of a 48-bit NonStop to 64-bit Julian for LCT to LCT time is:

date = @date ("JTSLCT", "TTS", @numbin(date));

An example of a NonStop 64-bit Julian for LCT to date type in Oracle:

date = @date ("YYY-MM-DD HH:MI:SS", "JTSLCT", date);
JTSGMT Julian timestamp, the same as JTS
JTS Julian timestamp. For more information see “Using JUL and JTS”.
JUL Julian day
TTS NonStop 48-bit timestamp
PHAMIS PHAMIS application date format
FFFFFF Fraction (up to microseconds). This is valid for both source as well as target details.
FFFFFFFFFFFF Fraction (up to picoseconds) valid for source detail only.
NNN Fraction for nanoseconds positions.
PPP Fraction for picoseconds positions.
STRATUS STRATUS application timestamp that returns microseconds since 1/1/1980.
CDATE C timestamp in seconds since the Epoch.
TZ Timezone

Using JUL and JTS

JUL and JTS produce numbers you can use in numeric expressions.

Example

The following expression produces the time at which an order is filled.

ORDER_FILLED = @DATE ("YYYY-MM-DD:HH:MI:SS", "JTS", @DATE
("JTS", "YYMMDDHHMISS", ORDER-TAKEN-TIME) + ORDER-MINUTES * 60 * 1000000)

The above expression changes ORDER-TAKEN-TIME into a Julian timestamp, then adds ORDER-MINUTES converted into microseconds to this timestamp (the inner @DATE expression). This expression is passed back as a new Julian timestamp to the outer @DATE expression, which converts it back to a more readable date and time.

Working with Date Strings

Descriptor string "YYYYMMDD” indicates that the following numeric or character field contains (in order) a four-digit year (YYYY), month (MM), and day (DD).

Descriptor string "DD/MM/YY” indicates that the field contains the day, a slash, the month, a slash, and the two digit year.

Converting Two-digit Years into Four-digit Values

In an instance where a two-digit year is supplied, but a four-digit year is required in the output, several options exist.

Example

The following show some ways to use date conversions.

DATE_COL = @DATE ("YYYY-MM-DD", "YY", date1.yr, "MM", date1.mm, "DD", date1.dd)
DATE_COL = @DATE ("YYYY-MM-DD", "YYMMDD", date1)
DATE_COL = @DATE ("YYYY-MM-DD:HH:MI:00", "YYMMDD", date1, "HHMI", time1)
DATETIME_COL = @DATE ("YYYY-MM-DD:HH:MI:SS", "YYYYMMDDHHMISS", NUMERIC-DATE)
JULIAN_TS_COL = @DATE ("JTS", "YYYYMMDDHHMISS", NUMERIC-DATE)
DATETIME_COL = @DATE ("YYYY-MM-DD:HH:MI:SS", "JTS", JTS-FIELD),
FRACTION_COL = @DATE ("FFFFFF", "JTS", JTS-FIELD)

Example: Working with an OpenSys timestamps having fractional positions greater than 6 or with time zone.

This example shows how to map a DB2 TIMESTAMP (12) with TIME ZONE to DATETIME fields.

Target columns
DATE12 DATETIME YEAR TO FRACTION(6) DEFAULT NULL,
DATE12_F DATETIME FRACTION TO FRACTION(6) DEFAULT NULL,
DATE12_TZ INTERVAL HOUR(2) TO MINUTE DEFAULT NULL

date12 = @date ("YYYY-MM-DD:HH:MI:SS.FFFFFF",
                "YYYY-MMDD:HH:MI:SS.FFFFFFNNNPPP", date12),

date12_f = @date ("NNNPPP", "YYYY-MM-DD:HH:MI:SS.FFFFFFNNNPPP", date12),
date12_tz = @date ("TZ", "YYYY-MM-DD:HH:MI:SS.FFFFFFNNNPPP TZ", date12),