助け合いフォーラム

Oracle DB

Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26673
問題を開く
次のSQL文を確認して下さい。

 SELECT employee_id, employee_name, hiredate
 FROM employees
 WHERE hiredate >= '30-APR-10';

このSQL文に関して正しい記述はどれですか。
ただし、データベースの実行環境は日本語環境とし、日付書式は"RR-MM-DD"とします。

正解

エラーが発生する

解説

Oracle Databaseでは、データ型の変換が意味を持つ場合に、自動的にデータ型の変換が行われます(暗黙的なデータ変換といいます)が、次のような場合にはデータ変換は行われません。

・数値が期待されている箇所に'abc'などの文字列を指定する
・日付書式にあっていない日付リテラルを指定する

設問では、日本語環境で日付書式が"RR-MM-DD"であるのに対し、"DD-MON-RR"の形式で日付リテラルが指定されていますので、暗黙的なデータ変換が行われません。

以上より、
・エラーが発生する
が正解となります。

設問のSQL文の実行結果は次のようになります。


 
SQLを表示
SELECT employee_id, employee_name, hiredate
FROM employees
WHERE hiredate >= '30-APR-10';

参考

Oracleでは、値をあるデータ型から別のデータ型へ変換する事をサポートしています。
データ型の変換には、「暗黙的なデータ変換」と「明示的なデータ変換」があります。

 [暗黙的なデータ変換]
  暗黙的なデータ変換とは、データ型の変換が意味を持つ場合に、Oracle Databaseが自動的に行う変換です。以下のような場合に変換が行われます。

   ・数値を指定すべきところに文字列が指定された場合:文字列を数値に変換
   ・日付リテラルが指定された場合:デフォルトの日付の表示書式にしたがって日付値に変換
   ・文字列を指定すべきところに数値が指定された場合:数値を文字列に変換
   ・文字列を指定すべきところに日付値が指定された場合:日付値を文字列に変換

  例) 文字列を数値に変換

  
 
SQLを表示
SELECT employee_id, employee_name, hiredate
FROM employees
WHERE department_id = '3';


  例2) 数値を文字列に変換

  
 
SQLを表示
SELECT employee_name || 100
FROM employees;


  例3) 日付リテラルを日付値に変換

  
 
SQLを表示
SELECT employee_id, employee_name, hiredate
FROM employees
WHERE hiredate >= '07-04-01';


  ただし、暗黙的なデータ変換はSQL文が分かりにくくなったり、パフォーマンスに悪影響を及ぼす場合があります。
  また、実行環境によっては正常に動作しない可能性があるなど、汎用性にも欠けます。
  よって次に説明する明示的なデータ変換を使用することが推奨されています。

 [明示的なデータ変換]
  明示的なデータ変換とは、変換関数を使用して行うデータ変換のことです。Oracle Databaseにはさまざまな変換関数が用意されてます。
  ただし、数値を日付値に変換したり、日付値を数値に変換する関数はありませんので気を付けて下さい。
  以下は主な変換関数です。

  

  
上に戻る

RR-MM-DDとDD-MM-RRの見分け方がわかりません。

投稿日 2025/03/23

問題ID : 26673
履歴
前回出題日時 :

次のSQL文を確認して下さい。

 SELECT employee_id, employee_name, hiredate
 FROM employees
 WHERE hiredate >= '30-APR-10';

このSQL文に関して正しい記述はどれですか。
ただし、データベースの実行環境は日本語環境とし、日付書式は"RR-MM-DD"とします。
正常に実行され該当するデータが表示される
正常に実行されるがデータは1件も表示されない
エラーが発生する
正常に実行され全てのデータが表示される

年を2桁で表した時、年が31以下の数値だと日と比較してどちらか判別できなくないですか?

2025/03/23 20:06

疑問のポイントがよくわからないのですが、解説では

日本語環境で日付書式が"RR-MM-DD"であるのに対し、"DD-MON-RR"の形式で日付リテラルが指定されていますので

とあり、年とか日とかじゃなく「MM(この場合だと04)」とすべきところが「MON(APR)」と指定されているから変換できずにエラーになっている、ということではないのでしょうか?


コメント

S Shibai_Oracle

2025/03/27 19:30

回答ありがとうございます。理解できました。

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

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