The EXTRACT
function extracts a portion of a dateTime
value, such as the day of the week or month of the year. This can be useful in situations where the data must be filtered or grouped by a slice of its timestamps, for example to compute the total sales that occurred on any Monday.
EXTRACT
function is:
<ExtractExpr> ::= EXTRACT(<expr>,<DateTimeUnit>) <DateTimeUnit> ::= MILLISECOND | SECOND | MINUTE | HOUR | DAY_OF_WEEK | DAY_OF_MONTH | DAY_OF_YEAR | DATE | WEEK | MONTH | QUARTER | YEAR | JULIAN_DAY_NUMBER
dateTime
attribute TimeStamp has a value representing 10/13/2015 11:35:12.104. The following list shows the results of using the EXTRACT
operator to extract each component of that value:
EXTRACT("TimeStamp", MILLISECOND) = 104 EXTRACT("TimeStamp", SECOND) = 12 EXTRACT("TimeStamp", MINUTE) = 35 EXTRACT("TimeStamp", HOUR) = 11 EXTRACT("TimeStamp", DATE) = 13 EXTRACT("TimeStamp", WEEK) = 41 EXTRACT("TimeStamp", MONTH) = 10 EXTRACT("TimeStamp", QUARTER) = 4 EXTRACT("TimeStamp", YEAR) = 2015 EXTRACT("TimeStamp", DAY_OF_WEEK) = 5 EXTRACT("TimeStamp", DAY_OF_MONTH) = 13 EXTRACT("TimeStamp", DAY_OF_YEAR) = 286 EXTRACT("TimeStamp", JULIAN_DAY_NUMBER) = 2455848
DAY_OF_WEEK=2
):
RETURN Quarters AS SELECT SUM(Amount) AS Total ARB(TRUNC(TimeStamp, QUARTER)) AS Qtr FROM SaleState WHERE EXTRACT(TimeStamp,DAY_OF_WEEK) = 2 GROUP BY Qtr
DEFINE ClaimsWithAge AS SELECT ARB(FLOOR((EXTRACT(TO_TZ(CURRENT_TIMESTAMP,claim_tz),JULIAN_DAY_NUMBER)- EXTRACT(TO_TZ(claim_ts,claim_tz),JULIAN_DAY_NUMBER))/7)) AS AgeInWeeks, COUNT(1) AS Count FROM SaleState GROUP BY AgeInWeeks HAVING AgeInWeeks < 2 ORDER BY AgeInWeeks; RETURN Result AS SELECT CASE AgeInWeeks WHEN 0 THEN 'Past 7 Days' WHEN 1 THEN 'Prior 7 Days' ELSE 'Other' END AS Label, Count FROM ClaimsWithAge