2011-04-04 65 views
11

我一直在访问关键术语LIKE和它的使用问题。我想用在查询表格下面的正则表达式(正则表达式)作为一种“verfication规则”的其中LIKE运营商过滤我的结果:Microsoft office Access`LIKE` VS`RegEx`

"^[0]{1}[0-9]{8,9}$" 

这又如何实现呢?

+0

RegEx不会在Access/Jet/ACE中的SQL中高效使用。它没有内置到数据库引擎中,所以它不会使用索引。它也不是VBA的一部分,但如果你真的想使用文件系统对象的RegEx,也可以。但对于验证规则(我不知道任何其他可能意味着“变体规则”),您根本不能使用RegEx。但是,可以使用您用于编辑的控件的BeforeUpdate事件,然后使用File System Object中的RegEx函数来测试控件的Text属性中的值,并相应地执行操作。 – 2011-04-07 03:48:00

回答

10

我不认为Access允许正则表达式匹配(VBA除外,但这不是你要求的)。 LIKE运营商甚至不支持交替。

因此,您需要将其分成两个表达式。

... WHERE (Blah LIKE "0#########") OR (Blah LIKE "0########") 

#意味着Access中的“单个数字”)。

24

我知道你不是问的VBA,但也许你就会给它一个机会

如果打开VBA项目,插入新的模块,然后选择工具 - >引用并添加引用到Microsoft VBScript Regular Expressions 5.5。鉴于下面的代码将指向新插入的模块。

Function my_regexp(ByRef sIn As String, ByVal mypattern As String) As String 
    Dim r As New RegExp 
    Dim colMatches As MatchCollection 
    With r 
     .Pattern = mypattern 
     .IgnoreCase = True 
     .Global = False 
     .MultiLine = False 
     Set colMatches = .Execute(sIn) 
    End With 
    If colMatches.Count > 0 Then 
     my_regexp = colMatches(0).Value 
    Else 
     my_regexp = "" 
    End If 
End Function 

现在你可以在你的SQL查询使用上述功能。所以你的问题现在可以通过调用

SELECT my_regexp(some_variable, "^[0]{1}[0-9]{8,9}$") FROM some_table 

如果没有任何内容匹配会返回空字符串。

希望你喜欢它。

+0

感谢您抽出宝贵时间!它效果很好。 – PhilNicholas 2014-04-18 08:20:08

+0

你好,我有这个方法的一个小问题,它也为NULL字段返回true。不是一个大问题,我可以解决这个问题,但我很好奇为什么会发生这种情况。 – Cornel 2016-06-23 21:23:33