COALESCE()获取非空值以及NULL值

时间:2013-07-16 07:47:06

标签: mysql

我的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查询浏览器来测试我的查询

提前致谢

1 个答案:

答案 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,则将从过滤器中完全省略,否则将使用传递的值。

请注意,由于需要重新使用参数,因此无法在此处使用?,除非您要指定每个参数两次,即。指定名称使查询更具可读性恕我直言。