Hola a todos.
Como algunos de ustedes sabrán, hay motores de bases de datos que soportan las expresiones regulares (
REGEXP) en las sentencias SQL.
Esto es muy útil si se desea filtrar registros cuando las capacidad de LIKE se ve superada.
Si por ejemplo se buscan registros que en un determinado
campo tengan los "
A" o también "
Á" con
LIKE no se puede hacer pero con
REGEXP si.
Ejemplo:
Código:
SELECT * FROM UnaTabla WHERE UnCampo REGEXP '[AÁ]'
El inconveniente sucede cuando escribimos un texto en una casilla de búsqueda de nuestro programa y queremos que al escribir "A" o "a" aparezcan listados todos los registros que en un campo tal tengan "A", "Á", "a" y "á", en este caso entra esta función llamada
SQLike que les comparto aquí, que en base a una cadena de texto que se pasa como parámetro esta devuelve otra pero con todas las posibilidades de las letras con tilde.
Código:
'' Converts the word into an expression that allows filtering with accents in a like statement.
'' The supported languages are: Spanish, Portuguese, Italian, French, German and Czech.
Static Public Function SQLike(sInput As String) As String
Dim i As Integer
Dim sSymbol As String
Dim aOut As New String[]
Dim sOut As String
aOut.Clear
For i = 1 To String.Len(sInput)
sSymbol = String.Mid(sInput, i, 1)
Select String.LCase(sSymbol)
Case "a", "á", "à", "â", "ã", "ä", "æ"
aOut.Add("[aáàâãäæ]")
Case "e", "é", "è", "ê", "ë", "ě"
aOut.Add("[eéèêëě]")
Case "i", "í", "ì", "ï", "î"
aOut.Add("[iíìïî]")
Case "o", "ó", "ò" "ô", "õ", "ö", "œ"
aOut.Add("[oóòôõöœ]")
Case "u", "ú", "ù", "û", "ü", "ů"
aOut.Add("[uúùûüů]")
Case "c", "ç", "č"
aOut.Add("[cçč]")
Case "n", "ñ", "ň"
aOut.Add("[nñň]")
Case "y", "ý", "ÿ"
aOut.Add("[yýÿ]")
Case "b", "ß"
aOut.Add("[bß]")
Case "z", "ž"
aOut.Add("[zž]")
Case "d", "ď"
aOut.Add("[dď]")
Case "r", "ř"
aOut.Add("[rř]")
Case "s", "š"
aOut.Add("[sš]")
Case "t", "ť"
aOut.Add("[tť]")
Case Else
aOut.Add(sSymbol)
End Select
Next
sOut = aOut.Join("")
Return sOut
End