1

ストレージに Oracle データベースを使用する Java ソフトウェアをプログラミングしています。おそらく、これは一種の監査証跡 (?) であり、テスト対象者が何を、どの日付で、どのコンピュータで行ったかを記録するのに最も適していると言えます。これらはすべて手動入力であるため、人々はこの情報を手動で入力し、データベースに保存して、管理者が表示できるようにします。

データを取得するために使用する SQL ステートメントは次のとおりです。

SELECT fld 1 as EmpNumber, 
fld2 as EmpName, 
fld6 as Date
FROM tblReportTemp  
LEFT JOIN tblPersonalInfo b ON $P{hrStoreOp}= b.ID_PERSONAL
WHERE computerName = $P{COMPNAME}
ORDER BY fld6,fld2 asc

私のチームメイトは、すべてのフィールドを VARCHAR 型にすることを決定し、日付ピッカーを使用するのではなく、ユーザーに日付を入力させることにしました。そのため、多くのテスト ユーザー (怠惰なユーザー) は、Q や 1、さらにはスペースなど、到達しやすいものを単純に入力します。まず第一に、日付で適切に配置されません。次に、配置する前に TO_DATE(fld6, 'MM/dd/yy') を介してデータを日付に変換しようとしましたが、失敗しました。 「Q」を日付に変換できません。

テキストボックスを日付ピッカーに置き換えましたが、データベースを変更することはできません。

したがって、私が提案する解決策は、上記の SQL ステートメントを変更して、日付に変換できないものを除外することです。これを実行できる Oracle 用の SQL クエリはありますか?

ありがとう。

4

2 に答える 2

1

関数を使用して変換を行い、不正なデータを NULL として破棄できます。

CREATE OR REPLACE FUNCTION my_to_date(p_date_string IN VARCHAR2) RETURNS DATE
IS
BEGIN
  RETURN TO_DATE(p_date_string, 'MM/DD/YY');
EXCEPTION WHEN OTHERS THEN
  RETURN NULL;
END;

作成後、それを使用します:

SELECT some_column
     , my_to_date(my_date_string_column) as real_date
FROM some_table
WHERE ...

また、データ型を DATE に変更し、ユーザーに有効な日付のみを入力させる必要があります。質問の列名に基づいて、同僚はすべてに汎用の「フレックス フィールド」を使用しようとしているようです。任意のタイプのデータを同じ行に格納することを本当に計画していない限り、これは通常、非常に悪い考えです (これも通常は悪い考えです)。

于 2013-04-26T04:58:25.407 に答える