ROUND は、フォーマットパターンで指定された単位に丸められた日付値を返します。
フォーマットパターンがない場合、動作は入力タイプによって異なります。
DATEまたはTIMESTAMP:最も近い日に丸めます。INTERVAL:月と日を抽出し、1ヶ月を30日と仮定して合計日数を返します。
フォーマットパターン
| フォーマットパターン | 丸め単位 |
|---|---|
CC, SCC | 世紀 — 最も近い世紀の1月1日に丸めます。年の下2桁が50以下の場合、切り捨てて現在の世紀の1月1日になります。51以上の場合、次の世紀の1月1日に切り上げます。 |
SYYY, YYYY, YEAR, SYEAR, YYY, YY, Y | 年 — 最も近い年の1月1日に丸めます。6月30日以前の場合、切り捨てて現在の年の1月1日になります。7月1日以降の場合、翌年の1月1日に切り上げます。 |
IYYY, IYY, IY, I | ISO年 — 最も近いISO年の開始日に丸めます。6月30日以前の場合、切り捨てます。7月1日以降の場合、切り上げます。 |
Q | 四半期 — 最も近い四半期の最初の日(1日)に丸めます。四半期の2番目の月の15日以前の場合、切り捨てます。16日以降の場合、切り上げます。 |
MONTH, MON, MM, RM | 月 — 最も近い月の最初の日(1日)に丸めます。15日以前の場合、切り捨てます。16日以降の場合、切り上げます。 |
WW | 週 — その年の1月1日と同じ曜日に丸めます。 |
IW | ISO週 — 最も近い月曜日に丸めます(ISO週の最初の日)。 |
W | 週 — その月の1日と同じ曜日に丸めます。 |
DDD, DD, J | 日 — 最も近い日に丸めます。 |
DAY, DY, D | 週の開始日 — 最も近い日曜日に丸めます。 |
HH, HH12, HH24 | 時 — 最も近い時間に丸めます。 |
MI | 分 — 最も近い分に丸めます。 |
各ISO年は、その年の最初の月曜日に始まります。最初のISO週は新年の少なくとも4日を含むため、ISO年は前年の12月に始まることがあります。
例
最も近い世紀への丸め
1950 は20世紀前半(下2桁 ≤ 50)に属するため、1901年に切り捨てられます。1951 は中間点(下2桁 > 50)を超えているため、2001年に切り上げられます。
SELECT TO_CHAR(ROUND(TO_DATE('1950','YYYY'),'CC'),'DD-MON-YYYY') "Century" FROM DUAL;
Century
-------------
01-JAN-1901
(1 row)
SELECT TO_CHAR(ROUND(TO_DATE('1951','YYYY'),'CC'),'DD-MON-YYYY') "Century" FROM DUAL;
Century
-------------
01-JAN-2001
(1 row)最も近い年への丸め
6月30日以前の日付は、現在の年の1月1日に切り捨てられます。7月1日以降の日付は、翌年の1月1日に切り上げられます。
SELECT TO_CHAR(ROUND(TO_DATE('30-JUN-1999','DD-MON-YYYY'),'Y'),'DD-MON-YYYY') "Year" FROM DUAL;
Year
-------------
01-JAN-1999
(1 row)
SELECT TO_CHAR(ROUND(TO_DATE('01-JUL-1999','DD-MON-YYYY'),'Y'),'DD-MON-YYYY') "Year" FROM DUAL;
Year
-------------
01-JAN-2000
(1 row)最も近いISO年への丸め
2004年のISO年は2003年12月29日に始まります。2005年のISO年は2005年1月3日に始まります。2004年6月30日はISO年2004の開始日に近く、2004年7月1日はISO年2005の開始日に近いです。
SELECT TO_CHAR(ROUND(TO_DATE('30-JUN-2004','DD-MON-YYYY'),'IYYY'),'DD-MON-YYYY') "ISO Year" FROM DUAL;
ISO Year
-------------
29-DEC-2003
(1 row)
SELECT TO_CHAR(ROUND(TO_DATE('01-JUL-2004','DD-MON-YYYY'),'IYYY'),'DD-MON-YYYY') "ISO Year" FROM DUAL;
ISO Year
-------------
03-JAN-2005
(1 row)最も近い 0.25 に丸める
2月は第1四半期の2番目の月です。2月15日以前の日付は1月1日に切り捨てられ、2月16日以降の日付は4月1日に切り上げられます。
SELECT ROUND(TO_DATE('15-FEB-07','DD-MON-YY'),'Q') "Quarter" FROM DUAL;
Quarter
--------------------
01-JAN-07 00:00:00
(1 row)
SELECT ROUND(TO_DATE('16-FEB-07','DD-MON-YY'),'Q') "Quarter" FROM DUAL;
Quarter
--------------------
01-APR-07 00:00:00
(1 row)最も近い月への丸め
15日以前の日付は、現在の月の1日に丸められます。16日以降の日付は、翌月の1日に丸められます。
SELECT ROUND(TO_DATE('15-DEC-07','DD-MON-YY'),'MONTH') "Month" FROM DUAL;
Month
--------------------
01-DEC-07 00:00:00
(1 row)
SELECT ROUND(TO_DATE('16-DEC-07','DD-MON-YY'),'MONTH') "Month" FROM DUAL;
Month
--------------------
01-JAN-08 00:00:00
(1 row)最も近い週 (WW) への丸め
WW は、指定された年の1月1日と同じ曜日に丸めます。2007年1月1日は月曜日であったため、すべての結果は月曜日です。1月18日は1月15日の月曜日に近く、1月19日は1月22日の月曜日に近いです。
SELECT ROUND(TO_DATE('18-JAN-07','DD-MON-YY'),'WW') "Week" FROM DUAL;
Week
--------------------
15-JAN-07 00:00:00
(1 row)
SELECT ROUND(TO_DATE('19-JAN-07','DD-MON-YY'),'WW') "Week" FROM DUAL;
Week
--------------------
22-JAN-07 00:00:00
(1 row)最も近いISO週 (IW) への丸め
IW は最も近い月曜日に丸めます。2004年1月1日は2003年12月29日の月曜日に最も近く、2004年1月2日は2004年1月5日の月曜日に最も近いです。
SELECT ROUND(TO_DATE('01-JAN-04','DD-MON-YY'),'IW') "ISO Week" FROM DUAL;
ISO Week
--------------------
29-DEC-03 00:00:00
(1 row)
SELECT ROUND(TO_DATE('02-JAN-04','DD-MON-YY'),'IW') "ISO Week" FROM DUAL;
ISO Week
--------------------
05-JAN-04 00:00:00
(1 row)最も近い週 (W) への丸め
W は、その月の1日と同じ曜日に丸めます。2007年3月1日は木曜日であったため、すべての結果は木曜日です。3月5日は3月8日の木曜日に近く、3月4日は3月1日の木曜日に近いです。
SELECT ROUND(TO_DATE('05-MAR-07','DD-MON-YY'),'W') "Week" FROM DUAL;
Week
--------------------
08-MAR-07 00:00:00
(1 row)
SELECT ROUND(TO_DATE('04-MAR-07','DD-MON-YY'),'W') "Week" FROM DUAL;
Week
--------------------
01-MAR-07 00:00:00
(1 row)最も近い日への丸め
正午(12:00:00 PM)以前の時刻は、現在の日付に切り捨てられます。正午以降の時刻は、翌日に切り上げられます。
SELECT ROUND(TO_DATE('04-AUG-07 11:59:59 AM','DD-MON-YY HH:MI:SS AM'),'J') "Day" FROM DUAL;
Day
--------------------
04-AUG-07 00:00:00
(1 row)
SELECT ROUND(TO_DATE('04-AUG-07 12:00:00 PM','DD-MON-YY HH:MI:SS AM'),'J') "Day" FROM DUAL;
Day
--------------------
05-AUG-07 00:00:00
(1 row)最も近い日曜日への丸め
DAY は最も近い日曜日に丸めます。2007年8月8日は水曜日であったため、8月5日の日曜日に近いです。2007年8月9日は木曜日であったため、8月12日の日曜日に近いです。
SELECT ROUND(TO_DATE('08-AUG-07','DD-MON-YY'),'DAY') "Day of Week" FROM DUAL;
Day of Week
--------------------
05-AUG-07 00:00:00
(1 row)
SELECT ROUND(TO_DATE('09-AUG-07','DD-MON-YY'),'DAY') "Day of Week" FROM DUAL;
Day of Week
--------------------
12-AUG-07 00:00:00
(1 row)最も近い時間への丸め
29分以下の時刻は、現在の時間に切り捨てられます。30分以上の時刻は、次の時間に切り上げられます。
SELECT TO_CHAR(ROUND(TO_DATE('09-AUG-07 08:29','DD-MON-YY HH:MI'),'HH'),'DD-MON-YY HH24:MI:SS') "Hour" FROM DUAL;
Hour
--------------------
09-AUG-07 08:00:00
(1 row)
SELECT TO_CHAR(ROUND(TO_DATE('09-AUG-07 08:30','DD-MON-YY HH:MI'),'HH'),'DD-MON-YY HH24:MI:SS') "Hour" FROM DUAL;
Hour
--------------------
09-AUG-07 09:00:00
(1 row)最も近い分への丸め
0~29秒は、現在の分に切り捨てられます。30~59秒は、次の分に切り上げられます。
SELECT TO_CHAR(ROUND(TO_DATE('09-AUG-07 08:30:29','DD-MON-YY HH:MI:SS'),'MI'),'DD-MON-YY HH24:MI:SS') "Minute" FROM DUAL;
Minute
--------------------
09-AUG-07 08:30:00
(1 row)
SELECT TO_CHAR(ROUND(TO_DATE('09-AUG-07 08:30:30','DD-MON-YY HH:MI:SS'),'MI'),'DD-MON-YY HH24:MI:SS') "Minute" FROM DUAL;
Minute
--------------------
09-AUG-07 08:31:00
(1 row)INTERVAL値の丸め
フォーマットパターンがない場合、ROUND は INTERVAL 値を、1ヶ月を30日と仮定して合計日数に変換します。
SELECT ROUND(TIMESTAMP '2020-10-10 10:22:22' - TIMESTAMP '2020-10-05 12:22:22');
round
-------
4
(1 row)
SELECT ROUND(INTERVAL '1 year 13 months 3 days');
round
-------
753
(1 row)関連項目
TRUNC— 日付値をフォーマットパターンで指定された単位に切り捨てます。ROUNDと同じフォーマットパターンを使用します。