プライマリ・コンテンツに移動
Oracle® Big Data Discovery Cloud Service EQLリファレンス

E65371-04
目次へ
目次
索引へ移動
索引

前
次
機械翻訳について

EXTRACTを使用したdateTime値の一部の抽出

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
日時単位 戻り値の範囲 注意
MILLISECOND (0 - 999)
SECOND (0 - 59)
MINUTE (0 - 59)
HOUR (0 - 23)
DAY_OF_WEEK (1 - 7) 日曜日が1である週内の日のランクを返します。
DAY_OF_MONTH (DATE) (1 - 31)
DAY_OF_YEAR (1 - 366)
WEEK (1 - 53) 年の週のランクを返します。最初の週はその年の最初の日から始まります。
MONTH (1 - 12)
QUARTER (1 - 4) 四半期は、1月、4月、7月および10月で開始します。
YEAR (-9999 - 9999)
JULIAN_DAY_NUMBER (0 - 5373484) タイムスタンプと11月24日深夜零時 -4713間の整数の日数を返します。
たとえば、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