2011-04-04 14 views
11

He tenido problemas con el término clave de acceso LIKE y su uso. Quiero usar la siguiente expresión regular (expresiones regulares) en forma de solicitud como una especie de "regla VERIFICACIÓN" donde el operador LIKE filtra mis resultados:Acceso de Microsoft Office `LIKE` VS` RegEx`

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

¿Cómo se puede lograr esto?

+0

RegEx no se podrá usar de manera eficiente en SQL en Access/Jet/ACE. No está integrado en el motor de base de datos, por lo que no usará índices. Tampoco es parte de VBA, aunque puede usar el RegEx desde el objeto del sistema de archivos si realmente lo desea. Pero para las reglas de validación (no sé nada más, podría querer decir "regla de varificación"), no puede usar RegEx en absoluto. Sin embargo, podría usar el evento BeforeUpdate del control que está utilizando para editar y luego usar la función RegEx del File System Object para probar el valor en la propiedad Text del control y actuar en consecuencia. –

Respuesta

10

No creo que Access permita las coincidencias de expresiones regulares (excepto en VBA, pero eso no es lo que estás preguntando). El operador LIKE ni siquiera es compatible con la alternancia.

Por lo tanto, debe dividirlo en dos expresiones.

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

(# significa "un solo dígito" en Acceso).

24

Sé que no estabas preguntando acerca de la VBA, pero tal vez le dará una oportunidad

Si abre un proyecto de VBA, insertar nuevo módulo, a continuación, elegir Herramientas -> Referencias y agregue una referencia a Microsoft VBScript Regular Expressions 5.5. Dado que pate el código a continuación al módulo recién insertado.

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 

Ahora usted puede utilizar la función anterior en su SQL consultas. Por lo tanto, su pregunta se resolverá ahora invocando

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

si se devolverá la cadena vacía si no se encuentra coincidencia.

Espero que les haya gustado.

+0

¡Gracias por tomarse el tiempo de publicar esto! Funcionó muy bien. – PhilNicholas

+0

Hola, tengo un pequeño problema con este método, también devuelve verdadero para los campos NULL. No es un gran problema, puedo evitar esto, pero tenía curiosidad por qué sucede esto. – Cornel

Cuestiones relacionadas