Oracleテナントでよく使用される日付時刻型にはdate、timestamp、intervalなどがあります。その他の日付時刻型の使い方については、『OceanBase SQLステートメント(Oracleモード)』 を参照してください。
Oracleテナントで一般的に使用されるデータベース時間関数はsysdateとsystimestampであり、両者のデフォルト表示形式はパラメータNLS_DATE_FORMATとNLS_TIMESTAMP_FORMATによって決定されます。interval型の時間関数にはnumtodsinterval、numtoymintervalがあり、数値とinterval型の間で変換できます。
例:時間表示のフォーマット。
Oracleのテナントは日付時刻型の表示形式を調整する時、to_char関数を使用できます。SQLは以下のとおりです:
obclient> select sysdate, to_char(sysdate,'YYYY/MM/DD HH24:MI:SS') new_date from dual; +-----------+---------------------+ | SYSDATE | NEW_DATE | +-----------+---------------------+ | 01-APR-20 | 2020/04/01 22:17:07 | +-----------+---------------------+ 1 row in set例:時間から年/月/日/時/分/秒を抽出します。
Oracleテナントは時間から年/月/日/時/分/秒を抽出する時、to_char関数を使用できます。SQLは以下のとおりです:
obclient> SELECT sysdate , to_char(sysdate,'yyyy') d_year , to_char(sysdate,'mm') d_month , to_char(sysdate,'dd') d_day , to_char(sysdate,'hh24') d_hour24 , to_char(sysdate,'mi') d_min ,to_char(sysdate,'ss') d_sec FROM dual; +-----------+--------+---------+-------+----------+-------+-------+ | SYSDATE | D_YEAR | D_MONTH | D_DAY | D_HOUR24 | D_MIN | D_SEC | +-----------+--------+---------+-------+----------+-------+-------+ | 01-JUN-22 | 2022 | 06 | 01 | 17 | 12 | 10 | +-----------+--------+---------+-------+----------+-------+-------+ 1 row in set例:時間型の加減算。
Oracleテナントでは時間の加減を実行できます。直接加減算(単位は日)を実行することも、関数NUMTODSINTERVAL 、 add_months関数を利用することもできます。
obclient> SELECT sysdate , sysdate+1 t0 , sysdate + numtodsinterval(1,'hour') t1 , sysdate + numtodsinterval(1,'minute') t2 , sysdate + numtodsinterval(1,'second') t3 , add_months(sysdate, 1) t4 , add_months(sysdate, -1) t5 FROM dual\G *************************** 1. row *************************** SYSDATE: 01-JUN-22 T0: 02-JUN-22 T1: 01-JUN-22 T2: 01-JUN-22 T3: 01-JUN-22 T4: 01-JUL-22 T5: 01-MAY-22 1 row in set
*例:intervalに関連する時間関数。
```javascript
obclient> select sysdate, systimestamp
,numtoyminterval(100,'YEAR') interval_year
,numtoyminterval(100,'MONTH') interval_mon
,numtodsinterval(100,'DAY') interval_day
,numtodsinterval(100,'HOUR') interval_hour
,numtodsinterval(100,'MINUTE') interval_min
,numtodsinterval(100,'SECOND') interval_sec
from dual \G
*************************** 1. row ***************************
SYSDATE: 01-JUN-22
SYSTIMESTAMP: 01-JUN-22 05.12.58.432471 PM +08:00
INTERVAL_YEAR: +000000100-00
INTERVAL_MON: +000000008-04
INTERVAL_DAY: +000000100 00:00:00.000000000
INTERVAL_HOUR: +000000004 04:00:00.000000000
INTERVAL_MIN: +000000000 01:40:00.000000000
INTERVAL_SEC: +000000000 00:01:40.000000000
1 row in set
```