カレンダー関連関数
Oracle AI Database 26ai には日付関連の関数が多数追加されました。本記事では追加された関数の実行例と注意点について解説します。
日付からの情報取得
日付から、年、四半期、月、曜日、日の情報を取得する以下の関数が追加されました。
| 関数名 | 戻り値のデータ型 | 説明 | デフォルト・フォーマット |
|---|---|---|---|
| CALENDAR_YEAR | VARCHAR2 | 年を返す | {YYYY} |
| CALENDAR_QUARTER | VARCHAR2 | 四半期名を返す | Q{n}-{YYYY} |
| CALENDAR_MONTH | VARCHAR2 | 月名を返す | {MON}-{YYYY} |
| CALENDAR_WEEK | VARCHAR2 | 週番号を返す | W{n}-{YYYY} |
| CALENDAR_DAY | VARCHAR2 | 日を返す | {DD}-{MON}-{YYYY} |
SQL> SELECT CALENDAR_YEAR(SYSDATE);
CALEN
-----
2026
SQL> SELECT CALENDAR_QUARTER(SYSDATE);
CALENDAR
--------
Q3-2026
SQL> SELECT CALENDAR_MONTH(SYSDATE);
CALENDAR_MONTH(SYS
------------------
AUG-2026
SQL> SELECT CALENDAR_WEEK(SYSDATE);
CALENDAR_
---------
W31-2026
SQL> SELECT CALENDAR_DAY(SYSDATE);
CALENDAR_DAY(SYSDATE)
---------------------
05-AUG-2026
CALENDAR_MONTH 関数や、CALENDAR_DAY の出力フォーマットは NLS 関連の初期化パラメーターで変化します。
SQL> ALTER SESSION SET nls_date_language='FRENCH';
Session altered.
SQL> SELECT CALENDAR_MONTH(SYSDATE);
CALENDAR_MONTH
--------------
AOUT -2026
SQL> SELECT CALENDAR_DAY(SYSDATE);
CALENDAR_DAY(SYSDATE)
-----------------------------
05-AOUT -2026
初期化パラメーターだけでなく、関数にフォーマットを指定することもできます。
SQL> SELECT CALENDAR_MONTH(SYSDATE, 'MON-YYYY', 'NLS_DATE_LANGUAGE=FRENCH');
CALENDAR_MONTH(SYSDATE,'M
-------------------------
AOUT -2026
日付の追加関数
特定の日付に数値を加えた場合の日付を返す関数が追加されました。
| 関数名 | 戻り値のデータ型 | 説明 | デフォルト・フォーマット |
|---|---|---|---|
| CALENDAR_ADD_YEARS | DATE | 追加した年を返す | {YYYY} |
| CALENDAR_ADD_QUARTERS | DATE | 追加した四半期名を返す | Q{n}-{YYYY} |
| CALENDAR_ADD_MONTHS | DATE | 追加した月名を返す | {MON}-{YYYY} |
| CALENDAR_ADD_WEEKS | DATE | 追加した週番号を返す | W{n}-{YYYY} |
| CALENDAR_ADD_DAYS | DATE | 追加した日を返す | {DD}-{MON}-{YYYY} |
SQL> SELECT CALENDAR_ADD_YEARS(SYSDATE, 1);
CALENDAR_
---------
05-AUG-27
SQL> SELECT CALENDAR_ADD_QUARTERS(SYSDATE, 2);
CALENDAR_
---------
05-FEB-27
SQL> SELECT CALENDAR_ADD_WEEKS(SYSDATE, 3);
CALENDAR_
---------
26-AUG-26
SQL> SELECT CALENDAR_ADD_DAYS(SYSDATE, 4);
CALENDAR_
---------
09-AUG-26
追加する日にマイナスの値を指定すると、パラメーターで指定された日よりも過去の日付を取得できます。
SQL> SELECT SYSDATE, CALENDAR_ADD_WEEKS(SYSDATE, -1);
SYSDATE CALENDAR_A
---------- ----------
2026/08/06 2026/07/30
経過時間
現在時刻からの差分を返す CALENDAR_SINCE 関数が追加されました。マニュアル SQL Reference には掲載されていますが、現状では動作しないようです。
SQL> SELECT CALENDAR_SINCE(DATE '2025-06-10');
CALENDAR_SINCE(DATE'2025-06-10')
--------------------------------------------------------------------------
Message 7 not found; No message file for product=RDBMS, facility=HCSC
開始日と終了日
指定された期間の開始日と終了日を返す関数が追加されました。
| 関数名 | 戻り値のデータ型 | 説明 |
|---|---|---|
| CALENDAR_YEAR_START_DATE | DATE | 年の開始日を返す |
| CALENDAR_YEAR_END_DATE | DATE | 年の終了日を返す |
| CALENDAR_QUARTER_START_DATE | DATE | 四半期の開始日を返す |
| CALENDAR_QUARTER_END_DATE | DATE | 四半期名の開始日を返す |
| CALENDAR_MONTH_START_DATE | DATE | 月の開始日を返す |
| CALENDAR_MONTH_END_DATE | DATE | 月の開始日を返す |
| CALENDAR_WEEK_START_DATE | DATE | 週の開始日を返す |
| CALENDAR_WEEK_END_DATE | DATE | 週の終了日を返す |
SQL> SELECT CALENDAR_YEAR_START_DATE(SYSDATE), CALENDAR_YEAR_END_DATE(SYSDATE);
CALENDAR_ CALENDAR_
--------- ---------
01-JAN-26 31-DEC-26
SQL> SELECT CALENDAR_QUARTER_START_DATE(SYSDATE), CALENDAR_QUARTER_END_DATE(SYSDATE);
CALENDAR_ CALENDAR_
--------- ---------
01-JUL-26 30-SEP-26
SQL> SELECT CALENDAR_MONTH_START_DATE(SYSDATE), CALENDAR_MONTH_END_DATE(SYSDATE);
CALENDAR_ CALENDAR_
--------- ---------
01-AUG-26 31-AUG-26
SQL> SELECT CALENDAR_WEEK_START_DATE(SYSDATE), CALENDAR_WEEK_END_DATE(SYSDATE);
CALENDAR_ CALENDAR_
--------- ---------
30-JUL-26 05-AUG-26
数値を返す
指定された日付から部分の数値を返す関数が追加されました。
| 関数名 | 戻り値のデータ型 | 説明 |
|---|---|---|
| CALENDAR_YEAR_NUMBER | NUMBER | 年の数値を返す |
| CALENDAR_QUARTER_OF_YEAR | NUMBER | 四半期番号を返す |
| CALENDAR_MONTH_OF_YEAR | NUMBER | 年から月番号を返す(1~12) |
| CALENDAR_MONTH_OF_QUARTER | NUMBER | 四半期内の月番号を返す(1~12) |
| CALENDAR_WEEK_OF_YEAR | NUMBER | 年から週番号を返す |
| CALENDAR_DAY_OF_YEAR | NUMBER | 年から日番号を返す |
| CALENDAR_DAY_OF_QUARTER | NUMBER | 四半期から日番号を返す |
| CALENDAR_DAY_OF_MONTH | NUMBER | 月から日番号を返す |
| CALENDAR_DAY_OF_WEEK | NUMBER | 週から日番号を返す(デフォルト:日曜日=1, 土曜日=7) |
SQL> SELECT CALENDAR_YEAR_NUMBER(SYSDATE), CALENDAR_QUARTER_OF_YEAR(SYSDATE);
CALENDAR_YEAR_NUMBER(SYSDATE) CALENDAR_QUARTER_OF_YEAR(SYSDATE)
----------------------------- ---------------------------------
2026 3
SQL> SELECT CALENDAR_MONTH_OF_YEAR(SYSDATE), CALENDAR_MONTH_OF_QUARTER(SYSDATE);
CALENDAR_MONTH_OF_YEAR(SYSDATE) CALENDAR_MONTH_OF_QUARTER(SYSDATE)
------------------------------- ----------------------------------
8 2
SQL> SELECT CALENDAR_WEEK_OF_YEAR(SYSDATE);
CALENDAR_WEEK_OF_YEAR(SYSDATE)
------------------------------
31
SQL> SELECT CALENDAR_DAY_OF_YEAR(SYSDATE), CALENDAR_DAY_OF_QUARTER(SYSDATE);
CALENDAR_DAY_OF_YEAR(SYSDATE) CALENDAR_DAY_OF_QUARTER(SYSDATE)
----------------------------- --------------------------------
217 36
SQL> SELECT CALENDAR_DAY_OF_MONTH(SYSDATE), CALENDAR_DAY_OF_WEEK(SYSDATE);
CALENDAR_DAY_OF_MONTH(SYSDATE) CALENDAR_DAY_OF_WEEK(SYSDATE)
------------------------------ -----------------------------
5 4
参考:Oracle AI Database 26ai: SQL Language Reference
Author: Noriyoshi Shinoda / Date: August 5, 2026