我有一个简单的JPQL查询。 (但这也适用于sql查询..)
FROM DomainObj d where d.field1 like 'TEST%' and d.field2 like '%';
如果数据库包含以下行:
1)field1 - > '测试'; field2 - >空
查询什么都不返回!
如果数据库包含以下值:
2)提交1 - > '测试'; field2 - > ''
查询返回行!
如何在搜索类似'%'的同时包含空值,使查询尽可能简单(避免和/或子句?)
我正在实现搜索数据库中实体的功能..我也同时搜索了许多字段..
谢谢 马可
答案 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)