我的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)........
现在我的查询有lott of fields(? - &gt;这是我将数据用于过滤器perpose),用户可以在其上查询,所以我使用的是 coalesce ,但缺点是使用合并是当我想获取员工表中的所有数据时,它不会给我空值,所以要使用 isNull <获取空值/ strong>功能。
现在我正在测试两个用例的上述查询
1 - &gt;用户可以在RecordID中传递百分比: - 在这种情况下,他应该获取所有数据为null以及非空值:
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 - &gt;用户可以根据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)
对于第一个用例,它工作正常,但对于第二个用例,它给我过滤数据以及null数据
那么我的查询应该是什么,以便上述单个查询支持我的两个用例。 我正在使用MYSQl查询浏览器来测试我的查询
提前致谢
答案 0 :(得分:1)
在使用单个静态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,则将从过滤器中完全省略,否则将使用传递的值。
请注意,由于需要重新使用参数,因此无法在此处使用?
,除非您要指定每个参数两次,即。指定名称使查询更具可读性恕我直言。