我的Mysql查询如下:
select RecordID,ID,Name,Description,RecordDateTimeUTC,Location from
eemployee where RecordID like ? and(isNull(RecordDateTimeUTC) OR RecordDateTimeUTC= CASE WHEN COALESCE(?,'') = '' THEN RecordDateTimeUTC ELSE ? END)........现在,我的查询有很多字段(
现在,我正在测试以上两个用例的查询。
1-->用户可以在RecordID中传递百分比:-在本例中,他应该获得所有数据--空值和非空值:
select RecordID,ID,Name,Description,RecordDateTimeUTC,Location from
eemployee where RecordID like '%'
and(isNull(RecordDateTimeUTC) OR RecordDateTimeUTC= CASE WHEN COALESCE('','') = '' THEN RecordDateTimeUTC ELSE '' END)2->用户可以基于RecordDateTimeUTC:-如果用户传递这个参数,那么他应该得到满足上述过滤的所有非空数据。
select RecordID,ID,Name,Description,RecordDateTimeUTC,Location from
eemployee where RecordID like '%' and(isNull(RecordDateTimeUTC) OR RecordDateTimeUTC= CASE WHEN COALESCE('2012-07-09 11:11:00','') = '' THEN RecordDateTimeUTC ELSE '2012-07-09 11:11:00' END)对于第一个用例,它工作得很好,但是对于第二个用例,它给我过滤过的数据和空数据。
,所以我的查询应该是什么,这样我的两个用例都被上面的单个查询所支持。我正在使用MYSQl查询浏览器来测试查询
提前感谢
发布于 2013-07-16 07:52:41
看起来,在使用单个静态SQL语句时,您试图使参数是可选的。在这种情况下,我可以想象你的意思是:
SELECT RecordID,ID,Name,Description,RecordDateTimeUTC,Location
FROM eemployee
WHERE (@RecordId IS NULL OR RecordID LIKE @RecordId)
AND (@RecordDateTimeUTC IS NULL OR RecordDateTimeUTC = @RecordDateTimeUTC)如果参数值为NULL,则将从筛选器中完全省略它,否则将使用传递的值。
注意,您不能在这里使用?,因为需要重用该参数--除非您希望指定每个参数两次,也就是说。指定名称使查询更加可读性更高。
https://stackoverflow.com/questions/17670864
复制相似问题