EXTRACT スカラー関数

EXTRACT 関数は、引数に基づいて日時の部分を戻します。

日付値の抽出

構文図を読む構文図をスキップするEXTRACT( EPOCHMILLENNIUMMILLENNIUMSCENTURYCENTURIESDECADEDECADESYEARYEARSQUARTERMONTHWEEKDAYDAYSDOWDOY FROM date-expressiontimestamp-expressiondate-durationtimestamp-duration )

時刻値の抽出

構文図を読む構文図をスキップするEXTRACT( HOURHOURSMINUTEMINUTESSECONDSECONDSMILLISECONDMILLISECONDSMICROSECONDMICROSECONDS FROM time-expressiontimestamp-expressiontime-durationtimestamp-duration )

スキーマは SYSIBM です。

引数が NULL になる可能性がある場合、結果も NULL になる可能性があります。 引数が NULL であれば、結果は NULL 値です。

日付値の抽出

EPOCH
指定された日付またはタイム・スタンプ式の 1970-01-01 00:00:00.00 以降の秒数が返されます。 期間を指定することはできません (SQLCODE SQL0171、SQLSTATE 22546)。 式が 1970-01-01 00:00:00.00 より後の日付またはタイム・スタンプを表す場合は、正の値になります。1970-01-01 00:00:00.00 より前の日付またはタイム・スタンプの場合は、負の値になります。
MILLENNIUM または MILLENNIUMS
指定された日付またはタイム・スタンプ式または期間に 1000 年の長さがいくつ含まれるかを示す序数が返されます。例えば、2000 年 1 月 1 日から 2999 年 12 月 31 日までの日付の場合は 2 です。
CENTURY または CENTURIES
指定された日付またはタイム・スタンプ式または期間に 100 年の長さがいくつ含まれるかを示す序数が返されます。例えば、2000 年 1 月 1 日から 2099 年 12 月 31 日までの日付の場合は 20 です。 通常の序数体系では、100 年までの日付が「1 世紀」で、2000 年 1 月 1 日から 2099 年 12 月 31 日までの間の日付が「21 世紀」などのようになりますが、これとは異なりますのでご注意ください。
DECADE または DECADES
指定された日付またはタイム・スタンプ式または期間に 10 年の長さがいくつ含まれるかを示す序数が返されます。例えば、2010 年 1 月 1 日から 2019 年 12 月 31 日までの日付の場合は 201 です。
YEAR または YEARS
指定された日付またはタイム・スタンプ式または期間の年部分が返されます。 結果は、YEAR スカラー関数によって返されるものと同じです。
QUARTER
指定された日付またはタイム・スタンプ式または期間の四半期 (1、2、3、または 4) が返されます。
MONTH
指定された日付またはタイム・スタンプ式または期間の月の番号 (1 から 12) が返されます。 結果は、MONTH スカラー関数によって返されるものと同じです。
WEEK
指定された日付またはタイム・スタンプ式または期間の年間通算週番号 (1 から 53) が返されます。 この値には、月曜から始まる ISO-8601 の週定義が使用されるため、年によっては 53 週までありますが、1 月の最初の数日が前年の 52 週目か 53 週目に含まれるケースがあります。
DAY または DAYS
指定された日付またはタイム・スタンプ式または期間の日の番号 (1 から 31) が返されます。 結果は、DAY スカラー関数によって返されるものと同じです。
DOW
指定された日付またはタイム・スタンプ式の曜日を示す数値 (日曜日は 1、月曜日は 2、…、土曜日は 7) が返されます。 期間を指定することはできません (SQLCODE SQL0171、SQLSTATE 22546)。
DOY
指定された日付またはタイム・スタンプ式の年間通算日を示す数値 (1 から 366) が返されます。 期間を指定することはできません (SQLCODE SQL0171、SQLSTATE 22546)。
date-expression
組み込みの DATE データ・タイプまたは組み込みの文字ストリング・データ・タイプのどちらかである値を戻す式。

日付式が文字ストリングの場合は、CLOB 以外の、日付を表記できる有効なストリングでなければなりません。 Unicode データベースでは、日付式が GRAPHIC ストリングであると、まず文字ストリングに変換されてから、関数が実行されます。

timestamp-expression
組み込みの TIMESTAMP データ・タイプまたは組み込みの文字ストリング・データ・タイプのどちらかである値を戻す式。

タイム・スタンプ式が文字ストリングの場合は、CLOB 以外の、タイム・スタンプを表記できる有効なストリングでなければなりません。 Unicode データベースでは、タイム・スタンプ式が GRAPHIC ストリングであると、まず文字ストリングに変換されてから、関数が実行されます。

date-duration
日付期間を指定する DECIMAL(8,0) の数値 (日付/時刻演算と期間を参照)。
timestamp-duration
タイム・スタンプ期間を指定する DECIMAL(14+s,s) の数値 (s は小数秒の桁数を表し、0 から 12 の範囲です (日付/時刻演算と期間を参照))。

時刻値の抽出

HOUR または HOURS
指定された時刻またはタイム・スタンプ式または期間の時間部分が返されます。 結果は、HOUR スカラー関数によって返されるものと同じです。
MINUTE または MINUTES
指定された時刻またはタイム・スタンプ式または期間の分部分が返されます。 結果は、MINUTE スカラー関数によって返されるものと同じです。
SECOND または SECONDS
指定された時刻またはタイム・スタンプ式または期間の秒部分が返されます。 結果は、以下によって返されるものと同じです。
  • または期間のデータ・タイプが TIME 値であるか、TIME または TIMESTAMP のストリング表記の場合は SECOND(expression, 6)
  • または期間のデータ・タイプが TIMESTAMP(s) 値の場合は SECOND(expression, s)
MILLISECOND または MILLISECONDS
指定されたタイム・スタンプ式または期間の秒部分 (1000 分の 1 秒までの小数部分を含む) に、1000 を掛けた値 (0 から 59999) が返されます。 時間式または期間を指定することはできません (SQLCODE SQL0180、SQLSTATE 22007)。
MICROSECOND または MICROSECONDS
指定されたタイム・スタンプ式または期間の秒部分 (100 万分の 1 秒までの小数部分を含む) に、1000000 を掛けた値 (0 から 59999999) が返されます。 時間式または期間を指定することはできません (SQLCODE SQL0180、SQLSTATE 22007)。
time-expression
組み込みの TIME データ・タイプまたは組み込みの文字ストリング・データ・タイプのどちらかである値を戻す式。

時間式が文字ストリングの場合は、CLOB 以外の、時間を表記できる有効なストリングでなければなりません。 Unicode データベースでは、時間式が GRAPHIC ストリングであると、まず文字ストリングに変換されてから、関数が実行されます。

timestamp-expression
組み込みの DATE、組み込みの TIMESTAMP、または組み込みの文字ストリングのデータ・タイプの値を戻す式。

timestamp-expression が DATE の場合は、時刻を深夜 0 時 (00.00.00) と見なし、TIMESTAMP(0) 値に変換されます。

タイム・スタンプ式が文字ストリングの場合は、CLOB 以外の、タイム・スタンプまたは日付を表記できる有効なストリングでなければなりません。 Unicode データベースでは、タイム・スタンプ式が GRAPHIC ストリングであると、まず文字ストリングに変換されてから、関数が実行されます。 ストリングは TIMESTAMP(6) 値に変換されます。

time-duration
時刻期間を指定する DECIMAL(6,0) の数値 (日付/時刻演算と期間を参照)。
timestamp-duration
タイム・スタンプ期間を指定する DECIMAL(14+s,s) の数値 (s は小数秒の桁数を表し、0 から 12 の範囲です (日付/時刻演算と期間を参照))。
この関数の結果のデータ・タイプは、指定される日時値の部分によって異なります。
  • If MILLENNIUM、CENTURY、DECADE、YEAR、QUARTER、MONTH、WEEK、DAY、DOW、DOY、HOUR、または MINUTE を指定した場合、結果のデータ・タイプは INTEGER になります。
  • SECOND が TIMESTAMP(p) 値と一緒に指定された場合、結果のデータ・タイプは DECIMAL(2+p, p) になります。ここで、p は小数部分の秒数の精度です。
  • SECOND が TIME 値か、TIME または TIMESTAMP のストリング表記と一緒に指定された場合、結果のデータ・タイプは DECIMAL(8,6) になります。
  • MILLISECOND、MILLISECONDS、MICROSECOND、または MICROSECONDS を TIMESTAMP(p) 値に対して指定した場合、結果のデータ・タイプは INTEGER になります。
  • EPOCH を指定した場合、結果のデータ・タイプは BIGINT になります。

引数が NULL になる可能性がある場合、結果も NULL になる可能性があります。 引数が NULL であれば、結果は NULL 値です。

PROJECT という名前の表では、以下のようになります。
  • 列 col1 には日付値「1988-12-25」が入っています。次のステートメントは、整数値 12 を返します。
       SELECT EXTRACT(MONTH FROM col1) FROM PROJECT;
  • 列 col2 にはタイム・スタンプ値「2007-02-14 12:15:06.123456」が入っています。 次のステートメントは、整数値 6123 を返します。
       SELECT EXTRACT(MILLISECONDS FROM col2) FROM PROJECT;
    次のステートメントは、整数値 6123456 を返します。
       SELECT EXTRACT(MICROSECONDS FROM col2) FROM PROJECT;
  • 列 col3 には日付値「2013-02-14」が入っています。次のステートメントは、整数値 201 を返します。
       SELECT EXTRACT(DECADE FROM col3) FROM PROJECT;
  • 列 col4 のデータ・タイプは DECIMAL(8,0) で、値 12301000 が入っています。 データ・タイプが DECIMAL(8,0) であるため、この値は日付期間 (1230 年、10 カ月、00 日) として解釈されます。 次のステートメントは、整数値 10 を返します。
       SELECT EXTRACT(MONTH FROM col4) FROM PROJECT;
  • 列 col5 のデータ・タイプは DECIMAL(6,0) で、値 123010 が入っています。 データ・タイプが DECIMAL(6,0) であるため、この値は時刻期間 (12 時間、30 分、10 秒) として解釈されます。 次のステートメントは、整数値 10 を返します。
       SELECT EXTRACT(SECONDS FROM col5) FROM PROJECT;
  • 列 col6 のデータ・タイプは DECIMAL(16,2) で、値 12301000123010.45 が入っています。 データ・タイプが DECIMAL(16,2) であるため、この値はタイム・スタンプ期間 (1230 年、10 カ月、00 日、12 時間、30 分、10.45 秒) として解釈されます。 次のステートメントは、整数値 10450 を返します。
       SELECT EXTRACT(MILLISECOND FROM col6) FROM PROJECT;