カスタム型と日付型属性にいくつかの文字列型属性がありますr_creation_date
。それらをすべて検索に使用して、より多くのフィールドに値を入力すると、結果が絞り込まれるようにしたいと考えています。
私は D2-Client 3.1 を使用しており、D2-Composer を使用して検索プロパティ ページとクエリ フォーム (DQL を指定している場所) を作成しています。
文字列型フィールドでフィルタリングするために、次の DQL を作成しました。
select * from my_custom_type
where (strattrib1 like '%$value(strattribinput1)%') and
("strattrib2" like '%$value(strattribintput2)%') and
("strattrib3" like'$value(strattribintput3)%') and
("strattrib4" like '%$value(strattribintput4)%') and
("strattrib5" like '%$value(strattribintput5)%') and
("strattrib6" like '%$value(strattribintput6)%')
ここLIKE %
には二重の目的があります。まず、何らかの文字列が入力されるたびに、その属性にその文字列が出現するかどうかをチェックします。何も入力されていない場合、その属性のすべての値が考慮されます。これによりAND
、空の入力を明示的にチェックせずに ing が可能になります。(として$value(strattrib1)<>''
)
r_creation_date
ここで、このクエリに date-type 属性のフィルターを追加します。DATEDIFF()
ただし、日付の比較に関数を使用する必要がありr_creation_date
、次のように入力がないことを明示的にチェックする必要があるため、これを行う方法がわかりません。
select * from my_custom_type
where (strattrib1 like '%$value(strattribinput1)%') AND
("strattrib2" like '%$value(strattribintput2)%') AND
("strattrib3" like'$value(strattribintput3)%') AND
("strattrib4" like '%$value(strattribintput4)%') AND
("strattrib5" like '%$value(strattribintput5)%') AND
("strattrib6" like '%$value(strattribintput6)%') AND
(DATEDIFF(day, "r_creation_date", DATE('$value(r_creation_date_intput)')) >= 0 AND $value(r_creation_date_input)<>'')
ここで、ユーザーが の日付を選択しない場合r_creation_date_input
、クエリ全体$value(r_creation_date_input)<>''
が に評価されます。したがって、選択クエリは何も返しません。FALSE
FALSE
質問
- これどうやってするの?
- これを行うための他のアプローチはありますか?
- 標準的なアプローチは何ですか?
- 同じ DQL に日付フィールドにさらにフィルターを追加したいと考えています。それで、それは可能ですか?
- 文字列属性の入力を検証するにはどうすればよいですか? Java を記述して D2-Client にアタッチできますか?