OracleCommandは文字通りの日付を変換しているようです
-
02-10-2019 - |
質問
OracleCommandとOracledataAdapterを使用して、Oracle用の小さなクエリツールを作成しました。ユーザーは完全なクエリ(パラメーターなし)を入力するだけで実行されると、結果がdatagridViewに表示されます。これまでのところ、私は無効なクエリを試しましたが、例:
SELECT * FROM mytable WHERE dateColumn = '1-JAN-10'
このクエリは、Oracleの有効なSQLではありません。 to_date()関数を使用して、日付リテラルと比較する必要があります。 SQL開発者もそれを拒否しますが、どういうわけか私のクエリツールは機能します。それは私のOracleCommandがここで少し魔法使いであることを意味しますか、それとも私は何か間違ったことをしていますか?また、ツールの目的はクエリのテストであるため、この動作を省略する方法があります。
ありがとう
解決
クエリはOracleに有効です。使用する必要はありません to_date()
セッションの日付形式で日付文字列を指定する場合、このような問題を避けるために、とにかくそれを行う方が一般的に良いです。
別のものがあるように聞こえます NLS_DATE_FORMAT
ツールの環境では、SQL開発者の環境、またはセッション日付形式がOracleCommandによって暗黙的に設定されています。
あなたはできる select value from nls_session_parameters where parameter = 'NLS_DATE_FORMAT'
SQL*PlusおよびSQL開発者から、およびツールからそれが何であるかを確認します。そしてから nls_database_parameters
データベースのデフォルトをオーバーライドしているものを確認します。
あなたのツールが持っているように見えます DD-MON-RR
他の場所で他の形式を期待していますが、それらのテーブルをチェックすることなく、データベースのデフォルトを使用している場所とセッションレベルでそれをオーバーライドする場所を言うのは困難です。それはDBデフォルトであり、他の環境でオーバーライドがあると思います。
SQL開発者から、お試しください alter session set nls_date_format='DD-MON-RR';
そして、無効なクエリを再実行します - そこでも機能するはずです。