带有通配符和空值的sql语句

时间:2013-03-18 20:31:48

标签: java sql null wildcard

我有4个包含值的组合框,也可以是通配符'%'。 如您所知,不返回NULL值。

我使用了(COLUMN_NAME LIKE'VALUE'或COLUMN_NAME IS NULL),它在某种程度上起作用,但它不是我需要的。 我需要的是返回NULL值,例如在这种情况下:

NAME = '%'
LASTNAME = '%'
ZIPCODE = '12345'
EMAIL = '%'

基本上,我想让它返回所有ZIPCODE,如'12345',以及其他3(NAME,LASTNAME,EMAIL)的空值。

不知道我是否清楚:(

如果我不是,请告诉我,

我怎么能做到这一点? 提前谢谢。

3 个答案:

答案 0 :(得分:2)

在SQL语句中使用LIKE运算符。根据您的数据库,使用NVL,ISNULL,IFNULL。

<强>甲骨文;     NVL(NAME,'')喜欢'%' 的 MSSQL;     ISNULL(LASTNAME,'')喜欢'%' 的 MySQL的;      IFNULL(EMAIL,'')喜欢'%'

并使用准备好的陈述。不要使用合并字符串值构建SQL语句。防止SQL注入。

答案 1 :(得分:1)

如果您不关心值是什么,并且您不关心它是否为null,那么甚至不要在where子句中包含该列:

where zipcode = '12345'

另外,我猜测你的'%'值来自用户选择不按该值搜索。我会在你的程序中用不同的方式表示,可能有一个Java null或一个空字符串“”,这样'%'仍然可能意味着更接近它在SQL“like”where子句片段中的含义 - 除null以外的任何值。

答案 2 :(得分:0)

这就是你要找的 -

    (lastname_col like :lastname or :lastname = '%' ) and 
    (zipcode_col like :zipcode or :zipcode = '%' ) and  
    and so on

即使在以下情况下,上述sql也会给出结果:zipCode为'12345',其余值为null。