我的自定义类型和日期类型属性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
而不显式检查空输入。 (作为$value(strattrib1)<>''
)
现在我想将日期类型属性r_creation_date
上的过滤器添加到此查询中。但是我无法得到如何做到这一点,因为我必须使用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
。因此,选择查询不会返回任何内容。
问题
答案 0 :(得分:0)
其中一种方法就是这样
AND((DATEDIFF(天,&#34; r_creation_date&#34;,DATE(&#39; $ value(r_creation_date_intput)&#39;)OR $ value(r_creation_date_intput)=&#39;&#39; )
如果用户没有进入,则第二个条件将等于true,并且查询的所有其他部分都将正常工作。
但是,当用户输入为空时,Documentum通常会自动排除子句。例如,使用任务空间搜索表单Documentum会自动执行。我不确定D2,但也许它会起作用。