微软办公室访问`LIKE` VS`RegEx`

时间:2011-04-04 13:26:40

标签: regex ms-access sql-like

我在访问密钥字段LIKE时遇到了问题,并且正在使用它。我想在查询表单中使用以下RegEx(正则表达式)作为一种“验证规则”,其中LIKE运算符会过滤我的结果:

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

如何实现这一目标?

2 个答案:

答案 0 :(得分:25)

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

如果您打开VBA项目,请插入新模块,然后选择工具 - >参考并添加对 Microsoft VBScript正则表达式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

如果没有匹配则返回空字符串。

希望你喜欢它。

答案 1 :(得分:10)

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

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

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

#表示Access中的“单个数字”。