Hitachi

Hitachi Advanced Data Binder SQLリファレンス


8.9.7 ROUND

日時データを日時書式で指定した単位に丸めて返します。

数データを丸めるスカラ関数ROUNDについては,「8.4.9 ROUND」を参照してください。

〈この項の構成〉

(1) 指定形式

スカラ関数ROUND::=ROUND(日時データ,日時書式)
 
  日時データ::=値式
  日時書式::=定数

(2) 指定形式の説明

日時データ

処理対象の日時データを指定します。

指定規則を次に示します。

  • 日時データは,値式の形式で指定します。値式については,「7.21 値式」を参照してください。

  • 日時データのデータ型は,DATE型,TIME型,またはTIMESTAMP型のどれかにしてください。

  • 日時データには,?パラメタを単独で指定できません。

日時書式

日時データを丸める単位を指定します。

指定規則を次に示します。

  • 日時書式には,文字列定数を指定します。文字列定数については,「6.3 定数」を参照してください。

  • 日時書式に指定できる要素を次の表に示します。

    表8‒28 日時書式に指定できる要素

    項番

    日時書式に指定できる要素

    単位

    説明

    1

    CC

    世紀

    日時データが各世紀の51年目以降の場合は,翌世紀の最初の年の1月1日0時0分0秒に切り上げます。50年目以前の場合は,同世紀の最初の年の1月1日0時0分0秒に切り捨てます。

    • 切り上げの例

      ROUND(TIMESTAMP'1951-10-04 15:25:38','CC')

      →TIMESTAMP'2001-01-01 00:00:00'

    • 切り捨ての例

      ROUND(TIMESTAMP'1950-10-04 15:25:38','CC')

      →TIMESTAMP'1901-01-01 00:00:00'

    2

    YYYY

    YYYYN

    YY

    YYN

    日時データが7月1日以降の場合は,翌年の1月1日0時0分0秒に切り上げます。6月30日以前の場合は,同年の1月1日0時0分0秒に切り捨てます。

    • 切り上げの例

      ROUND(TIMESTAMP'2013-07-01 15:25:38','YYYY')

      →TIMESTAMP'2014-01-01 00:00:00'

    • 切り捨ての例

      ROUND(TIMESTAMP'2013-06-30 15:25:38','YYYY')

      →TIMESTAMP'2013-01-01 00:00:00'

    3

    Q

    四半期

    日時データが各四半期の2番目の月(2月,5月,8月,または11月)の16日以降の場合は,翌四半期の最初の月の1日0時0分0秒に切り上げます。15日以前の場合は,同四半期の最初の月の1日0時0分0秒に切り捨てます。

    • 切り上げの例

      ROUND(TIMESTAMP'2013-11-16 15:25:38','Q')

      →TIMESTAMP'2014-01-01 00:00:00'

    • 切り捨ての例

      ROUND(TIMESTAMP'2013-11-15 15:25:38','Q')

      →TIMESTAMP'2013-10-01 00:00:00'

    1月1日を基準にして,3か月単位を四半期とします。

    • 第1四半期:1月1日〜3月31日

    • 第2四半期:4月1日〜6月30日

    • 第3四半期:7月1日〜9月30日

    • 第4四半期:10月1日〜12月31日

    4

    MONTH

    MON

    MM

    日時データが16日以降の場合は,翌月の1日0時0分0秒に切り上げます。15日以前の場合は,同月の1日0時0分0秒に切り捨てます。

    • 切り上げの例

      ROUND(TIMESTAMP'2014-01-16 15:25:38','MONTH')

      →TIMESTAMP'2014-02-01 00:00:00'

    • 切り捨ての例

      ROUND(TIMESTAMP'2014-01-15 15:25:38','MONTH')

      →TIMESTAMP'2014-01-01 00:00:00'

    5

    WW

    同年の最初の曜日を週の開始日とします。

    日時データが,週の開始日から4日目の正午12時以降の場合は,翌週の開始日の0時0分0秒に切り上げます。4日目の正午12時より前の場合は,同週の開始日の0時0分0秒に切り捨てます。

    • 切り上げの例

      ROUND(TIMESTAMP'2014-01-04 15:25:38','WW')

      →TIMESTAMP'2014-01-08 00:00:00'

      2014年1月1日は水曜日のため,週の開始日は水曜日になります。そのため,その週の4日目(1月4日の土曜日)の正午12時以降の場合は,翌週の開始日(1月8日)の0時0分0秒に切り上げます。

    • 切り捨ての例

      ROUND(TIMESTAMP'2014-01-04 10:25:38','WW')

      →TIMESTAMP'2014-01-01 00:00:00'

      2014年1月1日は水曜日のため,週の開始日は水曜日になります。そのため,その週の4日目(1月4日の土曜日)の正午12時より前の場合は,同週の開始日(1月1日)の0時0分0秒に切り捨てます。

    6

    W

    同月の最初の曜日を週の開始日とします。

    日時データが,週の開始日から4日目の正午12時以降の場合は,翌週の開始日の0時0分0秒に切り上げます。4日目の正午12時より前の場合は,同週の開始日の0時0分0秒に切り捨てます。

    • 切り上げの例

      ROUND(TIMESTAMP'2014-02-04 12:25:38','W')

      →TIMESTAMP'2014-02-08 00:00:00'

      2014年2月1日は土曜日のため,週の開始日は土曜日になります。そのため,その週の4日目(2月4日の火曜日)の正午12時以降の場合は,翌週の開始日(2月8日)の0時0分0秒に切り上げます。

    • 切り捨ての例

      ROUND(TIMESTAMP'2014-02-04 11:55:38','W')

      →TIMESTAMP'2014-02-01 00:00:00'

      2014年2月1日は土曜日のため,週の開始日は土曜日になります。そのため,その週の4日目(2月4日の火曜日)の正午12時より前の場合は,同週の開始日(2月1日)の0時0分0秒に切り捨てます。

    7

    DAY

    DAYN

    DY

    DYN

    D

    日曜日を週の開始日とします。

    日時データが,週の開始日から4日目(水曜日)の正午12時以降の場合は,翌週の開始日の0時0分0秒に切り上げます。4日目の正午12時より前の場合は,同週の開始日の0時0分0秒に切り捨てます。

    • 切り上げの例

      ROUND(TIMESTAMP'2014-02-05 12:25:38','DAY')

      →TIMESTAMP'2014-02-09 00:00:00'

      2014年2月5日は水曜日です。そのため,2月9日(日曜日)の0時0分0秒に切り上げます。

    • 切り捨ての例

      ROUND(TIMESTAMP'2014-02-05 11:55:38','DAY')

      →TIMESTAMP'2014-02-02 00:00:00'

      2014年2月5日は水曜日です。そのため,2月2日(日曜日)の0時0分0秒に切り捨てます。

    8

    DD

    DDD

    日時データが正午12時以降の場合は,翌日の0時0分0秒に切り上げます。正午12時より前の場合は,同日の0時0分0秒に切り捨てます。

    • 切り上げの例

      ROUND(TIMESTAMP'2014-01-16 15:25:38','DD')

      →TIMESTAMP'2014-01-17 00:00:00'

    • 切り捨ての例

      ROUND(TIMESTAMP'2014-01-16 10:25:38','DD')

      →TIMESTAMP'2014-01-16 00:00:00'

    9

    HH

    HH12

    HH24

    日時データが30分以降の場合は,翌時の0分0秒に切り上げます。29分以前の場合は,同時の0分0秒に切り捨てます。

    • 切り上げの例

      ROUND(TIMESTAMP'2014-01-16 15:35:38','HH')

      →TIMESTAMP'2014-01-16 16:00:00'

    • 切り捨ての例

      ROUND(TIMESTAMP'2014-01-16 15:25:38','HH')

      →TIMESTAMP'2014-01-16 15:00:00'

    10

    MI

    日時データが30秒以降の場合は,翌分の0秒に切り上げます。29秒以前の場合は,同分の0秒に切り捨てます。

    • 切り上げの例

      ROUND(TIMESTAMP'2014-01-16 15:35:33','MI')

      →TIMESTAMP'2014-01-16 15:36:00'

    • 切り捨ての例

      ROUND(TIMESTAMP'2014-01-16 15:35:28','MI')

      →TIMESTAMP'2014-01-16 15:35:00'

    11

    SSSSS

    SS

    日時データが500ミリ秒以降の場合は,翌秒に切り上げます。500ミリ秒未満の場合は,小数秒部分を切り捨てます。

    • 切り上げの例

      ROUND(TIME'11:59:30.596123','SS')

      →TIME'11:59:31.000000'

    • 切り捨ての例

      ROUND(TIME'11:59:30.488123','SS')

      →TIME'11:59:30.000000'

  • 日時書式に指定する文字データは,半角文字で指定してください。また,大文字,小文字は区別されません。

  • 日時書式に指定できる要素が複数ある場合,どれか1つを指定してください。どの要素を指定しても同じ実行結果になります。例えば,日時書式の要素としてYYYYYYYYNのどちらを指定しても実行結果は同じになります。

  • 日時書式の要素の前後の空白は無視されます。

  • 日時書式の長さは,64バイト以内にしてください。

(3) 規則

  1. 実行結果のデータ型とデータ長を次の表に示します。

    表8‒29 スカラ関数ROUNDの実行結果のデータ型とデータ長

    日時データのデータ型とデータ長

    実行結果のデータ型とデータ長

    DATE

    DATE

    TIME(p)

    TIME(p)

    TIMESTAMP(p)

    TIMESTAMP(p)

    (凡例)p:小数秒精度

  2. 実行結果の値は,非ナル値制約なし(ナル値を許す)となります。

  3. 日時データがナル値の場合,実行結果はナル値になります。

  4. 日時データDATE型の場合に,日時書式に時刻を丸める指定(DDDDDHHHH12HH24MISSSSS,またはSS)をしたときは,入力された日時データをそのまま返します。

  5. 日時データにTIME型のデータを指定した場合,日時書式に世紀,年,四半期,月,週,日を丸める指定(CCYYYYYYYYNYYYYNQMONTHMONMMWWWDAYDAYNDYDYNDDDD,またはDD)はできません。

  6. 日時データDATE型の場合,時刻要素には00:00:00が仮定されます。そのため,次のような指定をしたときは,週単位の切り捨てが行われます。

    (例)

    ROUND(DATE'2013-10-04','W') → DATE'2013-10-01'

  7. 実行結果のデータ型がDATE型の場合,実行結果が1年1月1日〜9999年12月31日の範囲に収まらないとエラーになります。

  8. 実行結果のデータ型がTIME型の場合,実行結果が0時0分0.000000000000秒〜23時59分59.999999999999秒の範囲に収まらないとエラーになります。

  9. 実行結果のデータ型がTIMESTAMP型の場合,実行結果が1年1月1日の0時0分0.000000000000秒〜9999年12月31日の23時59分59.999999999999秒の範囲に収まらないとエラーになります。

(4) 例題

例題

販売履歴表(SALESLIST)から,商品コード(PUR-CODEP001の商品の販売個数を半期ごと(2013年1/1〜6/30までと,2013年7/1〜12/31まで)に集計します。

SELECT SUM("PUR-NUM") FROM "SALESLIST"
    WHERE "PUR-DATE" BETWEEN DATE'2013-01-01' AND DATE'2013-12-31'
    AND "PUR-CODE"='P001'
    GROUP BY ROUND("PUR-DATE",'YYYY')

[図データ]

日時書式の要素にYYYYを指定した場合,7月1日以降のデータは切り上げ対象となります。また,6/30以前のデータは切り捨ての対象となります。そのため,1/1〜6/30を上半期,7/1〜12/31を下半期とした半期ごとの集計ができます。