日付関数の問題
問3
emp表には、入社日を扱うhiredate列(DATE型)があります。正常に実行されるのはどのSQL文ですか。
- a. SELECT hiredate + 1/24 FROM emp;
- b. SELECT hiredate + 7 FROM emp;
- c. SELECT ADD_MONTHS(hiredate,-7) FROM emp;
- d. SELECT MONTHS_BETWEEN(hiredate,7) FROM emp;
- e. SELECT NEXT_DAY(hiredate,7) FROM emp;
Oracleの日付型は、年月日だけでなく時刻(時分秒)も扱います。日付の加算(+
)、減算(-
)の単位は「日」です。したがって、選択肢aの+1/24
は1時間後、選択肢bの+7
は7日後の日付を返します。
ADD_MONTHS
関数は、第1引数の日付に第2引数で指定された月数を加算した日付を返します。第2引数が正数なら加算され、負数なら減算されます。つまり、選択肢cは7か月前の日付が返されます。
MONTHS_BETWEEN
関数は、第1引数と第2引数の差(月数)を戻します。したがって、2つの引数はどちらも日付型でなければならないため、選択肢dはエラーになります。
NEXT_DAY
関数の第2引数は曜日で、「対象日付(第1引数)の次の○○曜日(第2引数)はいつ?」を求めます。第2引数は、曜日を表す文字列(土曜日なら'SATURDAY'
)や、曜日を表す数値を指定できます。曜日を表す数値は、1
が日曜日で、7
が土曜日です。お間違えなく。
SQL> SELECT SYSDATE, NEXT_DAY(SYSDATE,'SATURDAY'),NEXT_DAY(SYSDATE,7) 2 FROM dual; SYSDATE NEXT_DAY NEXT_DAY -------- -------- -------- 15-12-21 15-12-26 15-12-26
ということで、正解は次のとおり、選択肢a、b、c、eです。
SQL> -- a SQL> SELECT hiredate + 1/24 FROM emp 2 WHERE deptno = 10; HIREDATE -------- 81-06-09 81-11-17 82-01-23 SQL> -- b SQL> SELECT hiredate + 7 FROM emp 2 WHERE deptno = 10; HIREDATE -------- 81-06-16 81-11-24 82-01-30 SQL> -- c SQL> SELECT ADD_MONTHS(hiredate,-7) FROM emp 2 WHERE deptno = 10; ADD_MONT -------- 80-11-09 81-04-17 81-06-23 SQL> -- d SQL> SELECT MONTHS_BETWEEN(hiredate,7) FROM emp 2 WHERE deptno = 10; SELECT MONTHS_BETWEEN(hiredate,7) FROM emp * 行1でエラーが発生しました。: ORA-00932: データ型が一致しません: DATEが予想されましたがNUMBERです。 SQL> -- e SQL> SELECT NEXT_DAY(hiredate,7) FROM emp 2 WHERE deptno = 10; NEXT_DAY -------- 81-06-13 81-11-21 82-01-30
言語系の試験は、実行した結果を頭の中で想像しなければいけないので、解いていると疲れますよね。最後はシンプルな問題にしましょう。
数値関数の問題
問4
Oracle Databaseに組み込まれているSQL関数を使用して実行できる算術演算はどれですか?
- a. 乗算
- b. 徐算
- c. べき乗
- d. 商の余り
- e. 平方根
正解は、選択肢c、d、eです。
乗算と徐算はSQL関数ではなく、「*
」演算子、「/
」演算子で求めます。一方、べき乗はPOWER
関数、商の余りはMOD
関数、平方根はSQRT
関数で求めます。
なお、数値関数と日付関数に関して、今回触れなかったTRUNC
関数とROUND
関数も大切ですので確認しておきましょう。
次回は、単一行関数のうち「変換関数」を取り上げます。予習しておいてくださいね。