JPQL / SQL查询:'%'包含空值

时间:2013-01-15 14:26:56

标签: mysql sql database hibernate jpql

我有一个简单的JPQL查询。 (但这也适用于sql查询..)

FROM DomainObj d where d.field1 like 'TEST%' and d.field2 like '%';

如果数据库包含以下行:

1)field1 - > '测试'; field2 - >空

查询什么都不返回!

如果数据库包含以下值:

2)提交1 - > '测试'; field2 - > ''

查询返回行!

如何在搜索类似'%'的同时包含空值,使查询尽可能简单(避免和/或子句?)

我正在实现搜索数据库中实体的功能..我也同时搜索了许多字段..

谢谢 马可

5 个答案:

答案 0 :(得分:8)

你不能在相等测试中直接使用null,因为null与所有东西都不相等,包括它自己。这就是is null测试的原因,例如:

select null = null -> null
select null <> null -> null
select 1 = null -> null
select 1 <> null -> null
select 1 + null -> null

基本上为null具有传染性,并且会使与之相比或添加的任何内容无效。

所以是的,你必须这样做

SELECT ... WHERE somefield LIKE '%...%' or somefield IS NULL

答案 1 :(得分:2)

试试这个:

...
and IFNULL(d.field2, '') like '%'

答案 2 :(得分:1)

...
where ...
and (field2 = '' or field2 is null)

请注意,条件field2 like '%'是无意义的,因为它匹配除null之外的任何文本。如果您向其添加了or field2 is mull,那么您将匹配所有内容,因此从逻辑上讲,您应该删除 field2上的条件

答案 3 :(得分:0)

使用IS NULL

where d.field1 like 'TEST%' OR d.field2 IS NULL;

答案 4 :(得分:0)

FROM DomainObj d where (d.field1 like 'TEST%' or d.field1 IS NULL) and (d.field2 like '%' or d.field2 IS NULL)