Oracle University 講師が ORACLE MASTER 取得を目指している方に向けて試験トピックを解説するブログ連載講座。「ORACLE MASTER Silver SQL 2019」資格取得に向けた試験トピックについて解説します。
————————————————-
今回はORACLE MASTER Silver SQLの試験トピック「単一行関数を使用した出力のカスタマイズ – ROUND、TRUNCおよびMOD関数を使用した数値の操作 -」に関連する問題をご紹介いたします。ORACLE MASTER Silver SQL(Exam Number: 1Z0-071-JPN)の詳細につきましては以下URLをご参考ください。
Oracle Database SQL Exam Number: 1Z0-071
URL: https://education.oracle.com/ja/oracle-database-sql/pexam_1Z0-071
————————————————-
前回に引き続き単一行関数を扱っていきましょう。今回は数値関数に関する問題を解いていこうと思います。
以下の内容をご確認ください。

(解説)
では解説をしていきますが、SQL文が沢山並んでいるからといって適当に選択肢を選ぶようなことは絶対にしないようにしてくださいね!
今回の問題のポイントは数値関数の使用方法と関数のネストになります。まずは選択肢にある数値関数について解説していきましょう。数値関数は以下の3つについて動作を押さえておく必要があります。

上記の実行例をもとに説明すると、ROUND(45.926, 2) は、ROUND関数の第2引数の値が2となっているので少数点第2位に丸める、つまり少数点第3位を四捨五入するので「45.93」になります。TRUNC(45.926, 2) は小数点第2位に切り捨てという動作になり「45.92」という結果になります。MOD関数は除算の余りを戻しますので上記の例だと「1600 ÷ 300」となり結果が「100」となります。
ROUND関数もTRUNC関数も第2引数を省略した場合は0を指定した場合と同様の動作になります。
※MOD関数は第2引数は省略できません
- ROUND(45.926, 0) と ROUND(45.926) の内容は同じ:整数の値に丸める(小数点第1位を四捨五入) 動作になり結果は「46」
- TRUNC(45.926, 0) とTRUNC(45.926) の内容は同じ:少数点以下を切り捨てる動作になり結果は「45」
関数の動作が確認できましたら、次はネストを見ていきましょう。
今回の選択肢では関数が入れ子状態になっているのが確認できます。この場合は最も深いレベル(最も内側)の関数から実行していき、その結果を外側の関数に渡すという動作になります。選択肢1のSQL文を使ってどのような動作になるかさらに確認していきましょう。

いかがでしょうか。後はROUND(250, -2) の結果を求めるだけですね。引数にマイナスの値が入ってますが特に問題はありません。マイナスの場合は小数点から数えて左側の桁の数値を丸める動作になります。つまりこの場合は2桁目の十の位を四捨五入するので結果は「300」になります。(選択肢1は正解の選択肢でした!)
ちなみに単一行関数は任意のレベルでネストすることが可能ですので合わせて覚えておくとよいと思います。
以上を踏まえて各選択肢をみていきましょう。
選択肢1は先ほどの解説で確認しました。結果が「300」となるので正しい選択肢です。
選択肢2の内側の処理はROUND(250.01, -2)ですので2桁目の十の位を四捨五入して300となります。この値を外側のTRUNC関数に入れるとTRUNC(300)となりやはり結果は「300」となります。正しい選択肢ですね。
選択肢3の内側の処理はROUND(250.01)となっているので250となり、この値を外側のTRUNC関数に入れるとTRUNC(250, -2)となるので結果は「200」になります。誤りです。
選択肢4の内側の処理はROUND(250.01, -1)なので250となり、これを外側のTRUNC関数に入れるとTRUNC(250, -1)となり結果は「250」になります。誤りです。
選択肢5の内側の処理はTRUNC(250.01, 0)なので250となり、この値を外側のROUND関数に入れるとROUND(250, -1)となり結果は「250」になります。誤りです。
選択肢6は内側のROUND(250.01, -2)は300という結果になります。この値を外側のMOD関数に渡しているわけですが、MOD関数は除算の余りを出す関数です。MOD(300, 2) は「300 ÷ 2 = 150 余り0」となるので結果は「0」が表示されます。誤りですね。
正解は1と2になります。
実際に実行した内容も掲載しておきましょう。

ここまでが今回の問題に対する説明と解答になりますが、ROUND関数とTRUNC関数についてはもう少し補足しておきます。ROUND関数やTRUNC関数は数値を扱うだけではなく日付についても使用することができます。日付を指定した場合はどのような動作になるかについて以下にまとめておきます。
- SYSDATE=2021-07-25 とした場合 (書式は YYYY-MM-DDとしてます)

日付を指定した場合の動作についても覚えておきましょう。
今回は単一行関数のROUND、TRUNC、MODに関する内容について学習を行いました。
それぞれの関数についてはDUAL表を用いることで簡単に動作確認が可能です。色々と操作して使い方に慣れておけば試験問題の選択肢で複雑なSQL文が出てきても焦ることなく正確の選択肢を選ぶことが出来るはずです!今回の学習はここまでとしましょう。それではお疲れ様でした。
————————————————-
– ORACLE MASTER Silver SQL 2019 のご紹介
– ORACLE MASTER Silver SQL 2019 試験記事トピック一覧
————————————————-
その他の ORACLE MASTER 試験トピック解説講座シリーズ:
【Oracle University講師によるORACLE MASTER Gold DBA 2019 試験トピック解説講座】トピック一覧
————————————————-
