Microsoft Office Access `LIKE` VS` RegEx`

У меня возникли проблемы с ключевым термином доступа LIKE и он используется. Я хочу использовать следующий RegEx (регулярное выражение) в форме запроса как своего рода "правило верфи", где оператор LIKE фильтрует мои результаты:

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

Как это можно сделать?

Ответ 1

Я не думаю, что Access разрешает регулярные выражения (кроме VBA, но это не то, что вы просите). Оператор LIKE даже не поддерживает чередование.

Поэтому вам нужно разбить его на два выражения.

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

(# означает "одна цифра" в Access).

Ответ 2

Я знаю, что вы не спрашивали о VBA, но, возможно, вы дадите ему шанс

Если вы открываете проект VBA, вставьте новый модуль, затем выберите Инструменты → Ссылки и добавьте ссылку на Microsoft VBScript Regular Expressions 5.5. Учитывая, что pate код ниже для вновь вставленного модуля.

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

если возвращает пустую строку, если ничего не сопоставлено.

Надеюсь, вам понравилось.