助け合いフォーラム

Oracle DB

Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26686
問題を開く
日付値の演算について正しいものはどれですか。
ただし、日付の表示書式はRR-MM-DDとします。

正解

TO_DATE('12-01-01') + 12/24の結果は"12-01-01の正午"である

解説

日付値に対して、「数値/24」を加算したり減算した場合は、数値を「時間数」として加算したり減算したりします。
設問の「12/24」であれば、12時間として演算します。

また、TO_DATE関数は文字リテラルを日付値に変換します。引数に時刻が指定されていない場合は午前0時0分0秒に設定されます。

以上より、
・TO_DATE('12-01-01') + 12/24の結果は"12-01-01の正午"である
が正解となります。

正解の演算を実行すると次のようになります。


 
SQLを表示
SELECT TO_CHAR(TO_DATE('12-01-01') + 12/24, 'RR-MM-DD HH24:MI:SS')
FROM dual;


その他の選択肢については以下のとおりです。

・TO_DATE('12-01-01') + 12/24の結果はエラーとなる
日付値に対し数値/24を加算したり減算してもエラーとななりません。

・TO_DATE('12-01-01') - 12/24の結果は"12-01-01の正午"である
12時間減算するので、"11-12-31の正午"となります。

・TO_DATE('12-01-01') - 12/24の結果は"12-01-01の午前0時"である
"12-01-01の午前0時"から12時間減算するので、"11-12-31の正午"となります。

参考

日付値に対し、加算や減算の演算を行えます。日付値に対して実行できる演算は次のとおりです。

 [日付値 + 数値, 日付値 - 数値]
 数値を日数として日付値に加算/減算します。演算結果は加算/減算後の日付値となります。

 
 
SQLを表示
SELECT SYSDATE, SYSDATE + 10 "10加算", SYSDATE - 10 "10減算"
FROM dual;


 [日付値 + 数値/24, 日付値 - 数値/24]
 数値を時間数として日付値に加算/減算します。演算結果は加算/減算後の日付値となります。

 
 
SQLを表示
SELECT TO_CHAR(SYSDATE, 'RR-MM-DD HH24:MI:SS') "SYSDATE",
TO_CHAR(SYSDATE + 12/24, 'RR-MM-DD HH24:MI:SS')"12時間加算",
TO_CHAR(SYSDATE - 12/24, 'RR-MM-DD HH24:MI:SS') "12時間減算"
FROM dual;


 [日付値 - 日付値]
 2つの日付値間の日数を計算します。演算結果は数値です。また、1日に満たない値は少数値となります。

 
 
SQLを表示
SELECT SYSDATE - hiredate
FROM employees;


なお、日付値 + 日付値の演算はできません。また、日付値に対して乗算(掛け算)や除算(割り算)もできませんので、注意しましょう。
上に戻る

+ 12/24の形式について

投稿日 2024/01/12

TO_DATE('12-01-01') + 1/2の結果と、
TO_DATE('12-01-01') + 12/24の結果は"12-01-01の正午"で同じになりますか?
/24で記述する必要はありますか?

2024/01/12 16:20

同じ結果になります。実務的には、時なら1/24、分なら1/1440の表記を使うことが多いような気がします。パッと見て分かりやすいので。

SQL> select to_date('12-01-01') from dual;

TO_DATE('12-01-01
-----------------
12-01-01 00:00:00

SQL> select to_date('12-01-01') +12/24 from dual;

TO_DATE('12-01-01
-----------------
12-01-01 12:00:00

SQL> select to_date('12-01-01') +1/2 from dual;

TO_DATE('12-01-01
-----------------
12-01-01 12:00:00


コメント

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?