Tonyのコメントを反映して、フロントエンドのクエリツールにこれらの例外を見つけて処理させるよりも、DATE列に日付を保存する方がはるかに良いでしょう。
ただし、間違ったデータモデルで立ち往生している場合、以前のバージョンで最も簡単なオプションは、変換を実行してエラーを処理する関数を作成することです。
CREATE OR REPLACE FUNCTION my_to_date( p_date_str IN VARCHAR2,
p_format_mask IN VARCHAR2 )
RETURN DATE
IS
l_date DATE;
BEGIN
l_date := to_date( p_date_str, p_format_mask );
RETURN l_date;
EXCEPTION
WHEN others THEN
RETURN null;
END my_to_date;
クエリは次のようになります
SELECT *
FROM myTable
WHERE my_to_date(myTable.sdate, 'MM/dd/yyyy') <= {?EndDate}
もちろん、MY_TO_DATE
に関数ベースのインデックスが必要になる可能性があります。 このクエリを適度に効率的にするために呼び出します。
12.2では、Oracleはto_date
に拡張機能を追加しました。 およびcast
エラーのある変換を処理する関数
SELECT *
FROM myTable
WHERE to_date(myTable.sdate default null on conversion error, 'MM/dd/yyyy') <= {?EndDate}
validate_conversion
を使用することもできます 有効な日付である(またはそうでない)すべての行を検索する場合に機能します。
SELECT *
FROM myTable
WHERE validate_conversion( myTable.sdate as date, 'MM/DD/YYYY' ) = 1