Microsoft office Access `LIKE` VS` RegEx` - PullRequest
       14

Microsoft office Access `LIKE` VS` RegEx`

11 голосов
/ 04 апреля 2011

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

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

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

Ответы [ 2 ]

25 голосов
/ 04 апреля 2011

Я знаю, что вы не спрашивали о 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

if вернет пустую строку, если ничего не найдено.

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

10 голосов
/ 04 апреля 2011

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

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

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

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

...