すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ROUND

最終更新日:Jul 01, 2024

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)