曜日の文字列表現 (つまり、 Monday、Mardi、الثلاثاءなど) と NLS_DATE_LANGUAGE が与えられた場合、この曜日が有効であることを検証する方法はありますか?
なぜこれが難しいのですか?これが単なる英語である場合、次のようなことを行うのは明らかです。
if <day_variable> in ('Monday','Tuesday', ...) then
...
私はこれをいくつかの国で拡張的に実行しようとしていますが、現在および将来のすべての NLS_DATE_LANGUAGE のすべての曜日を書き出すことを知らない (そして気にすることができない) ため、これは実際にはオプションではありません。 .
次のオプションは explicitTO_DATE()
で、金曜日とうまく機能します。これは 5 月なので偶然だと思いますが、残りの週では惨めに失敗します。
SQL> select to_date('Friday', 'Day') as d from dual;
D
----------
2015-05-01
SQL> select to_date('Monday', 'Day') as d from dual;
select to_date('Monday', 'Day') as d from dual
*
ERROR at line 1:
ORA-01835: day of week conflicts with Julian date
これは興味深いエラーです...オラクルは次のことを推奨しています:
日付指定から曜日の値を削除するか、ユリウス日付の正しい曜日を入力してください。
曜日を削除することは、私が興味を持っているのはそれだけであり、ユリウス日がないため、ユリウス日に対して間違った曜日がないため、実際にはオプションではありません。
他の場所で提案されている回避策を確認し、別の日付形式 ( Dy
、dy
、FMDy
など) を使用すると、明らかに同じエラーが発生します。
オラクルは内部的にすべての日付をユリウス日として表しているように見え、この状況では混乱しています。
Oracle で指定された日が正しいことを確認するにはどうすればよいですか?