Access查询中Like通配符无法捕获Null值,如何解决?
解决Access查询中Like语句无法捕获Null值的问题
嘿,这个问题我之前碰到好多次了——Access里的Null值确实有点“顽固”,因为任何和Null做比较的运算结果都是Null(逻辑上等价于False),所以你原来的Like语句哪怕变成Like "**",也永远匹配不到Null值。别担心,给你几个简单直接的解决方案,完美贴合你的需求:
方案一:用OR组合条件(最直观)
直接在查询的条件行里写下面的表达式,记得把[你的目标字段]替换成你实际要过滤的字段名:
( [Forms]![Reports]![Filter] Is Null OR [Forms]![Reports]![Filter] = "" ) OR ( [你的目标字段] Like "*" & [Forms]![Reports]![Filter] & "*" )
逻辑说明:
- 当过滤器控件
Filter是空值(Null)或者空字符串时,第一个条件成立,查询会返回所有记录(包括那些字段值为Null的); - 当过滤器有输入值时,第二个条件生效,只返回字段值匹配
Like规则的记录(这时候Null值不会被包含,符合你“选中过滤器时抓取匹配项”的需求)。
方案二:用IIF函数简化条件
如果你喜欢更紧凑的写法,可以用IIF函数判断过滤器状态:
IIF(IsNull([Forms]![Reports]![Filter]) OR Len([Forms]![Reports]![Filter])=0, True, [你的目标字段] Like "*" & [Forms]![Reports]![Filter] & "*")
逻辑说明:
- 先检查过滤器是否为空(包括
Null和空字符串),如果是,直接返回True(所有记录都通过筛选); - 如果过滤器有值,就执行原来的
Like匹配逻辑。
额外提醒:如果选中过滤器时也需要包含Null值
要是你后来需求变了,想在过滤器有值时也显示字段为Null的记录,只需要把条件改成这样:
( [Forms]![Reports]![Filter] Is Null OR [Forms]![Reports]![Filter] = "" ) OR ( [你的目标字段] Like "*" & [Forms]![Reports]![Filter] & "*" OR [你的目标字段] Is Null )
本质上就是给有过滤器值的情况,额外加了一个字段 Is Null的判断。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

