ROUND関数は、指定されたテンプレート形式を使用して丸められた日付値を返します。
テンプレート形式が指定されておらず、パラメータータイプがDATEまたはTIMESTAMPの場合、関数は日付を最も近い日に丸めます。 パラメータータイプがINTERVALの場合、関数は日付値から月数と日数を抽出します。 次に、毎月30日という仮定に基づいて合計日数を計算し、結果を返します。
ROUND関数に使用できるテンプレートの形式を次の表に示します。
表1. ROUND関数の日付テンプレート
Format | 説明 |
CC、SCC | 1月1日、CC01を返します。 CCの後の2桁の数字が50以下の場合、CCは指定された年の最初の2桁です。 CCの後の2桁の数字が50より大きい場合、CCは指定された年の最初の2桁に1を加えたものになります。 |
SYYY, YYYY, YEAR, SYEAR, YYY, YY, Y | 1月1日YYYYを返します。 日付が指定された年の6月30日以前の場合、関数は指定された年の1月1日を返します。 日付が指定された年の7月1日以降の場合、関数は翌年の1月1日を返します。 |
IYYY、IYY、IY、I | ISO年の開始日を返します。 日付が6月30日以前の場合、関数は現在のISO年の開始日を返します。 日付が7月1日以降の場合、関数は次のISO年の開始日を返します。 説明 各ISO年は、その年の最初の月曜日に始まります。 ISO年では、月曜日は週の最初の日であり、毎週月曜日から日曜日までの7日があります。 最初の週には、新年の少なくとも4日が含まれています。 したがって、ISO年は前年の12月から開始できます。 |
Q | 四半期の最初の日を返します。 日付が四半期の2番目の月の15日以前の場合、関数は現在の四半期の1日目を返します。 日付が四半期の2か月目の16日以降の場合、関数は次の四半期の1日目を返します。 |
月、月、MM、RM | 月の最初の日を返します。 日付が月の15日以前の場合、関数は現在の月の最初の日を返します。 日付が月の16日以降の場合、関数は次の月の最初の日を返します。 |
WW | 現在の日付に最も近い週を返します。 |
IW | 日付を最も近いISO週に丸めます。 |
W | 日付値を最も近い週に丸めます。 週の開始日は月の最初の日と見なされます。 |
DDD、DD、J | 日付値を最も近い日に丸めます。 |
DAY, DY, D | 日付値を最も近い日曜日に丸めます。 |
HH、HH12、HH24 | 日付値を最も近い時間に丸めます。 |
MI | 日付値を最も近い分に丸めます。 |
次の例は、ROUND関数の使用方法を説明するために使用されます。
次の例では、各日付値は最も近い世紀の開始年に丸められています。
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)
次の例では、各日付値は最も近い年の開始日に丸められます。
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に丸められます。 2004のISO年は2003年12月29日に始まります。 2番目の例では、日付値は2005に丸められます。 2005のISO年は、同じ年の1月3日に始まります。
各ISO年は、その年の最初の月曜日に始まります。 ISO年では、月曜日は週の最初の日であり、毎週月曜日から日曜日までの7日があります。 最初の週には、新年の少なくとも4日が含まれています。 したがって、ISO年は前年の12月から開始できます。
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)
次の例では、各日付値は最も近い四半期に丸められます。
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)
次の例では、各日付値は最も近い月に丸められます。
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)
次の例では、各日付値は最も近い週に丸められています。 したがって、第1の例では、1月18日に最も近い月曜日の日付は1月15日である。 第2の例では、1月19日、2007日に最も近い月曜日の日付は1月22日、2007日である。
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週に丸められています。 ISOウィークは月曜日から始まります。 第1の例では、2004年1月1日に最も近い月曜日の日付は2003年12月29日である。 第2の例では、1月2日2004に最も近い月曜日の日付は、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)
次の例では、各日付値は最も近い週に丸められ、週の開始日は月の最初の日と見なされます。
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)
次の例では、各日付値は最も近い日に丸められます。
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)
以下の例では、各日付値は、最も近い日曜日の日付に丸められます。
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)
次の例では、各日付値は最も近い時間に丸められます。
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)
次の例では、各日付値は最も近い分に丸められます。
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型の各日付値は整数に丸められます。
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)