EXTRACT関数は、曜日や年の月などのdateTime値の一部を抽出します。 これは、データを、タイムスタンプのスライスによりフィルタまたはグループ化する必要がある場合(月曜日に発生した総売上をコンピュートする場合など)に有効です。
EXTRACT関数の構文は、次のとおりです:
<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属性TimeStampには10/13/2015 11:35:12.104を表す値があります。 次に、EXTRACT演算子を使用してその値の各コンポーネントを抽出した結果を示します:
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