You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MS Access 2007 SQL中如何在LIKE通配符中使用非单字符列表实现DRY代码?

解决Access 2007 SQL中多LIKE OR的DRY优化问题

嘿,我完全懂你想把重复的LIKE OR语句简化成更DRY(Don't Repeat Yourself)写法的需求,但Access的通配符[]确实只能匹配单个字符,所以你的尝试会把11这类多数字符串拆成两个单独的1处理,这就导致了不符合预期的结果。别担心,不用VBA也有几种靠谱的解决办法:

方法一:使用INSTR+分隔字符串匹配完整值

这种方法通过给目标值和ID都加上统一的分隔符,确保我们匹配的是完整的目标字符串,不会被拆分成单个字符:

SELECT * 
FROM Student_Enrollment 
WHERE INSTR('|2|5|8|17|14|11|21|', '|' & ID & '|') > 0

注意:请确保你选用的分隔符(这里用了|)不会出现在ID字段的内容里,如果有冲突,可以换成其他符号比如#或者^

方法二:用子查询生成目标列表,通过JOIN匹配

这种方法可读性更强,把所有要匹配的目标值整理成一个临时子查询,再通过JOIN关联主表:

SELECT se.*
FROM Student_Enrollment se
INNER JOIN (
    SELECT '2' AS TargetID UNION ALL
    SELECT '5' UNION ALL
    SELECT '8' UNION ALL
    SELECT '17' UNION ALL
    SELECT '14' UNION ALL
    SELECT '11' UNION ALL
    SELECT '21'
) AS Targets ON se.ID LIKE '*' & Targets.TargetID & '*'

后续如果需要添加或删除目标值,只需要修改子查询里的UNION ALL部分就行,比一堆OR语句好维护太多。

这两种方法都完全不需要VBA,完美实现了你想要的DRY风格,而且能准确匹配你需要的目标ID。

内容的提问来源于stack exchange,提问作者rita pinhasov

火山引擎 最新活动