2011-04-04 63 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