我的自定义类型和日期类型属性上有一些字符串类型属性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
这个查询中添加日期类型属性的过滤器。但是我不知道该怎么做,因为我必须使用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 吗?