助け合いフォーラム
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"とします。
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文の実行結果は次のようになります。

・数値が期待されている箇所に'abc'などの文字列を指定する
・日付書式にあっていない日付リテラルを指定する
設問では、日本語環境で日付書式が"RR-MM-DD"であるのに対し、"DD-MON-RR"の形式で日付リテラルが指定されていますので、暗黙的なデータ変換が行われません。
以上より、
・エラーが発生する
が正解となります。
設問のSQL文の実行結果は次のようになります。

SQLを表示
SELECT employee_id, employee_name, hiredate
FROM employees
WHERE hiredate >= '30-APR-10';
FROM employees
WHERE hiredate >= '30-APR-10';
参考
Oracleでは、値をあるデータ型から別のデータ型へ変換する事をサポートしています。
データ型の変換には、「暗黙的なデータ変換」と「明示的なデータ変換」があります。
[暗黙的なデータ変換]
暗黙的なデータ変換とは、データ型の変換が意味を持つ場合に、Oracle Databaseが自動的に行う変換です。以下のような場合に変換が行われます。
・数値を指定すべきところに文字列が指定された場合:文字列を数値に変換
・日付リテラルが指定された場合:デフォルトの日付の表示書式にしたがって日付値に変換
・文字列を指定すべきところに数値が指定された場合:数値を文字列に変換
・文字列を指定すべきところに日付値が指定された場合:日付値を文字列に変換
例) 文字列を数値に変換

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

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

ただし、暗黙的なデータ変換はSQL文が分かりにくくなったり、パフォーマンスに悪影響を及ぼす場合があります。
また、実行環境によっては正常に動作しない可能性があるなど、汎用性にも欠けます。
よって次に説明する明示的なデータ変換を使用することが推奨されています。
[明示的なデータ変換]
明示的なデータ変換とは、変換関数を使用して行うデータ変換のことです。Oracle Databaseにはさまざまな変換関数が用意されてます。
ただし、数値を日付値に変換したり、日付値を数値に変換する関数はありませんので気を付けて下さい。
以下は主な変換関数です。


データ型の変換には、「暗黙的なデータ変換」と「明示的なデータ変換」があります。
[暗黙的なデータ変換]
暗黙的なデータ変換とは、データ型の変換が意味を持つ場合に、Oracle Databaseが自動的に行う変換です。以下のような場合に変換が行われます。
・数値を指定すべきところに文字列が指定された場合:文字列を数値に変換
・日付リテラルが指定された場合:デフォルトの日付の表示書式にしたがって日付値に変換
・文字列を指定すべきところに数値が指定された場合:数値を文字列に変換
・文字列を指定すべきところに日付値が指定された場合:日付値を文字列に変換
例) 文字列を数値に変換

SQLを表示
SELECT employee_id, employee_name, hiredate
FROM employees
WHERE department_id = '3';
FROM employees
WHERE department_id = '3';
例2) 数値を文字列に変換

SQLを表示
SELECT employee_name || 100
FROM employees;
FROM employees;
例3) 日付リテラルを日付値に変換

SQLを表示
SELECT employee_id, employee_name, hiredate
FROM employees
WHERE hiredate >= '07-04-01';
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
回答ありがとうございます。理解できました。