EXTRACT (日時)
構文
extract_datetime::=
目的
EXTRACTは、日時式または期間式から、指定された日時フィールドの値を抽出して戻します。exprには、要求されたフィールドと互換性のある日時または期間データ型に評価される任意の式を指定できます。
                  
- 
                        
YEARまたはMONTHが要求された場合、exprはデータ型DATE、TIMESTAMP、TIMESTAMPWITHTIMEZONE、TIMESTAMPWITHLOCALTIMEZONEまたはINTERVALYEARTOMONTHの式に評価される必要があります。 - 
                        
DAYが要求された場合、exprはデータ型DATE、TIMESTAMP、TIMESTAMPWITHTIMEZONE、TIMESTAMPWITHLOCALTIMEZONEまたはINTERVALDAYTOSECONDの式に評価される必要があります。 - 
                        
HOUR、MINUTEまたはSECONDが要求された場合、exprはデータ型TIMESTAMP、TIMESTAMPWITHTIMEZONE、TIMESTAMPWITHLOCALTIMEZONEまたはINTERVALDAYTOSECONDの式に評価される必要があります。DATEは、Oracle Databaseによって時刻フィールドを持たないANSIDATEデータ型として処理されるため、ここでは有効ではありません。 - 
                        
TIMEZONE_HOUR、TIMEZONE_MINUTE、TIMEZONE_ABBR、TIMEZONE_REGIONまたはTIMEZONE_OFFSETが要求された場合、exprはデータ型TIMESTAMPWITHTIMEZONEまたはTIMESTAMPWITHLOCALTIMEZONEの式に評価される必要があります。 
EXTRACTは、exprをANSI日時データ型として解釈します。たとえば、EXTRACTはDATEをレガシーOracle DATEではなく、時刻要素を持たないANSI DATEとして処理します。したがって、DATE値からは、YEAR、MONTHおよびDAYのみを抽出できます。同様に、TIMESTAMP WITH TIME ZONEデータ型からは、TIMEZONE_HOURおよびTIMEZONE_MINUTEのみを抽出できます。
                  
TIMEZONE_REGIONまたはTIMEZONE_ABBR(略称)を指定する場合、戻り値は、適切なタイムゾーン地域名または略称を含むVARCHAR2文字列です。その他の日時フィールドを指定する場合、戻り値は、グレゴリオ暦での日時値を表すNUMBERデータ型の整数値です。タイムゾーン値を持つ日時から抽出する場合は、UTC形式の値が返されます。有効なタイムゾーン地域名およびそれに対する略称を表示するには、V$TIMEZONE_NAMES動的パフォーマンス・ビューに問合せを実行してください。
                  
このファンクションは、次に示す最初の例のように、非常に大規模な表の日時フィールド値を操作する場合に特に有効です。
ノート:
夏時間機能には、タイムゾーン地域名が必要です。この名前は、大小2つのタイムゾーン・ファイルに格納されます。これらのファイルのうち、使用する環境および使用するOracle Databaseのリリースに応じて、いずれか一方がデフォルトのファイルになります。タイムゾーン・ファイルおよびタイムゾーン名の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
日時フィールドと日時または期間値の式を組み合せると、あいまいな結果になる場合があります。この場合、Oracle Databaseは、UNKNOWNを戻します(詳細は、次の例を参照してください)。
                  
関連項目:
- 
                           
両方のファイル内のすべてのタイムゾーン地域名のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
 - 
                           
EXTRACTの文字の戻り値に割り当てる照合を定義する照合導出ルールは、『Oracle Databaseグローバリゼーション・サポート・ガイド』の付録Cを参照してください。 - 
                           
datetime_value_exprおよびinterval_value_exprの詳細は、日時および期間の演算を参照してください。 - 
                           
動的パフォーマンス・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
 
例
次の例では、oe.orders表から、各月の注文数を戻します。
                  
SELECT EXTRACT(month FROM order_date) "Month", COUNT(order_date) "No. of Orders"
  FROM orders
  GROUP BY EXTRACT(month FROM order_date)
  ORDER BY "No. of Orders" DESC, "Month";
     Month No. of Orders
---------- -------------
        11            15
         6            14
         7            14
         3            11
         5            10
         2             9
         9             9
         8             7
        10             6
         1             5
        12             4
         4             1
 
12 rows selected.
次の例では、1998年を戻します。
SELECT EXTRACT(YEAR FROM DATE '1998-03-07')
  FROM DUAL;
EXTRACT(YEARFROMDATE'1998-03-07')
---------------------------------
                             1998
次の例では、サンプル表hr.employeesから、2007以降に雇用されたすべての従業員を選択します。
                  
SELECT last_name, employee_id, hire_date FROM employees WHERE EXTRACT(YEAR FROM TO_DATE(hire_date, 'DD-MON-RR')) > 2007 ORDER BY hire_date; LAST_NAME EMPLOYEE_ID HIRE_DATE ------------------------- ----------- --------- Johnson 179 04-JAN-08 Grant 199 13-JAN-08 Marvins 164 24-JAN-08 . . .
次の例では、結果があいまいになるため、OracleはUNKNOWNを戻します。
                  
SELECT EXTRACT(TIMEZONE_REGION FROM TIMESTAMP '1999-01-01 10:00:00 -08:00') FROM DUAL; EXTRACT(TIMEZONE_REGIONFROMTIMESTAMP'1999-01-0110:00:00-08:00') ---------------------------------------------------------------- UNKNOWN
タイムゾーン数値オフセットが式に指定され、その数値オフセットが複数のタイムゾーン地域名をマップする場合、結果があいまいになります。
