DATE_TRUNC スカラー関数

DATE_TRUNC 関数は、日付、時刻、またはタイム・スタンプの値を、指定された時間単位に切り捨てます。

Read syntax diagramSkip visual syntax diagramDATE_TRUNC(format-string ,datetime-expression)

スキーマは SYSIBM です。

フォーマット・ストリング

255 バイトを超えない文字ストリングを戻し、すべての先行ブランクおよび末尾ブランクを除去した後で、 表 1にリストされている文字ストリングの 1 つを戻す式。 結果のサブストリングは、指定された日時式のタイプに対して有効なフォーマット・エレメントでなければなりません (SQLSTATE 22007)。 例えば、DATE 値を最初の時間、分、または秒に切り捨てたり、TIME 値を年の最初の日に切り捨てたりすることはできません。

日時式 (datetime-expression)
DATE 値、TIME 値、または TIMESTAMP 値、あるいは日付、時刻、タイム・スタンプによる期間を表す DECIMAL 値を戻す式。 これらのデータ・タイプのストリング表現は、 DATE、TIME、TIMESTAMP、または DECIMAL 値に明示的にキャストする必要があります。 期間について詳しくは、 日時操作と期間を参照してください。
表 1. フォーマット・ストリングに使用できる値
フォーマット・ストリング 日時式を切り捨てる単位 以下に例を示します。 切り捨ての結果
'MILLENNIUM' または 'MILLENNIUMS' 千年紀の最初の日 1999-02-14 1000-01-01
'CENTURY' または 'CENTURIES' 世紀の最初の日 1999-02-14 1900-01-01
'DECADE' または 'DECADES' 10 年単位の最初の日 1999-02-14 1990-01-01
'YEAR' または 'YEARS' 年の最初の日 1999-02-14 1999-01-01
'QUARTER' 四半期の最初の日 2017-05-14 20:38:40.24 2017-04-01 00:00:00
'MONTH' または 'MONTHS' 月の最初の日 2017-05-14 20:38:40.24 2017-05-01 00:00:00
'WEEK' 週の最初の日 2017-05-14 20:38:40.24 2017-05-08 00:00:00
'DAY' または 'DAYS' 日の初め 2017-05-14 20:38:40.24 2017-05-14 00:00:00
'HOUR' または 'HOURS' 時間の初め 2017-05-14 20:38:40.24 2017-05-14 20:00:00
'MINUTE' または 'MINUTES' 分の初め 20:38:40.24576985 20:38:00
'SECOND' または 'SECONDS' 秒の初め 20:38:40.24576985 20:38:40
'MILLISECOND' または 'MILLISECONDS' ミリ秒の初め 20:38:40.24576985 20:38:40.245
'MICROSECOND' または 'MICROSECOND' マイクロ秒の初め 20:38:40.24576985 20:38:40.245769
format-string の値に大/小文字の区別はありません。

結果

指定された日時式に応じて以下のようになります。
  • DATE 値または TIMESTAMP 値の場合、結果は TIMESTAMP 値になります。
  • TIME 値の場合、結果は TIME 値になります。
  • 日付、時刻、またはタイム・スタンプによる期間を表わす DECIMAL 値の場合、結果は同じタイプの DECIMAL 値になります。
引数が NULL になる可能性がある場合、結果も NULL になる可能性があります。 引数が NULL であれば、結果は NULL 値です。

  • 例 1: DATE 値を月の初めに切り捨てます。
    values date_trunc('MONTH', DATE('2007-02-18'))
          Result: 2007-02-01 00:00:00
  • 例 2: TIMESTAMP 値を時間の初めに切り捨てます。
    values date_trunc('HOUR', TIMESTAMP('2017-02-14 20:38:40.24'));
         Result: 2017-02-14 20:00:00
  • 例 3: TIME 値を分の初めに切り捨てます。
     values date_trunc('MINUTE', TIME('20:38:40'));
         Result: 20:38:00
  • 例 4: 日付による期間のデータ・タイプは DECIMAL(8,0) です。 例えば、値 00200203 は 20 年 2 カ月と 3 日という期間を表します。 日付期間を月の初めに切り捨てます。
    db2 "values date_trunc('MONTH', cast ('00200203' AS DECIMAL(8,0)))"
    
    1         
    ----------
       200200.
    
      1 record(s) selected.
  • 例 5: 時刻による期間のデータ・タイプは DECIMAL(6,0) です。 例えば、値 102930 は 10 時間 29 分 30 秒という期間を表します。 時刻期間を分の初めに切り捨てます。
    db2 "values date_trunc('MINUTE',  cast ('102930' AS DECIMAL(6,0)))"
    
    1       
    --------
     102900.
    
      1 record(s) selected.
  • 例 6: タイム・スタンプによる期間のデータ・タイプは DECIMAL(14+s,s) です。s はタイム・スタンプ精度です。 例えば、DECIMAL(20,6) 値 00070005032040.000301 は、7 年 0 カ月と 5 日、3 時間 20 分 40.000301 秒という期間を表します。 タイム・スタンプ期間を時間の初めに切り捨てます。
    db2 "values date_trunc('HOUR', cast ('00070005032040.000301' AS DECIMAL(15,1)))"
    
    1                
    -----------------
        70005030000.0
    
      1 record(s) selected.