Feedback

VB - Einfache Ähnlichkeitssuche (SQL)

Veröffentlicht von am 7/27/2009
(2 Bewertungen)
Mit dieser Funktion kann eine einfache Ähnlichkeitssuche realisiert werden. Die Funktion ersetzt Sonderzeichen durch % und fügt ein % zwischen Ziffern und Buchstaben ein. Wenn sich der Anwender (z.B. bei einer Produktbezeichnung) vertippt, bekommt er mit größerer Wahrscheinlichkeit trotzdem das richtige Ergebnis.

Übergib der Funktion den String der in deiner SLQ-Anweisung hinter WHERE steht. Z.B. übergibts du "gr.Produkt0815" dann gibt die die Funktion zurück: "gr%Produkt%0815" und findet dann bei der Abfrage auch das gewünschte "Großes Produkt-Art-0815" in der Datenbank ;-)
''' <summary>
''' Erzeugt aus einem String einen Suchstring der ähnliche Ergebisse findet
''' </summary>
''' <param name="str">Suchstring</param>
''' <param name="EnclosingTags">Soll der String ein führendes und folgendes % haben?</param>
''' <returns>Konvertierter Suchstring</returns>
''' <remarks>Ersetzt Sonderzeichen mit % und setzt ein % zwischen Ziffern/Buchstaben</remarks>
Public Function CreateSimilarSearchString(ByVal str As String, Optional ByVal EnclosingTags As Boolean = False) As String
	Dim numbers() As String = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
	Dim IsNumber As Boolean
	Dim tmp As String = ""

	str = FindAndReplace(str, " ", "%", False)
	str = FindAndReplace(str, "-", "%", False)
	str = FindAndReplace(str, "_", "%", False)
	str = FindAndReplace(str, ".", "%", False)
	str = FindAndReplace(str, ",", "%", False)
	str = FindAndReplace(str, "+", "%", False)
	str = FindAndReplace(str, "(", "%", False)
	str = FindAndReplace(str, ")", "%", False)
	str = FindAndReplace(str, "*", "%", False)
	str = FindAndReplace(str, "'", "%", False)
	CreateSimilarSearchString = ""

	If Len(str) > 1 Then
		tmp = Mid(str, 1, 1)
		If ArrExist(numbers, Mid(str, 1, 1), False) > -1 Then
			IsNumber = True
		Else
			IsNumber = False
		End If

		For i = 2 To Len(str)
			If ArrExist(numbers, Mid(str, i, 1), False) > -1 Then
				If IsNumber = False Then
					tmp += "%" & Mid(str, i, 1)
					IsNumber = True
				Else
					tmp += Mid(str, i, 1)
				End If
			Else
				If IsNumber = True Then
					tmp += "%" & Mid(str, i, 1)
					IsNumber = False
				Else
					tmp += Mid(str, i, 1)
				End If
			End If
		Next
	End If
	If EnclosingTags = True Then tmp = "%" & tmp & "%"
	CreateSimilarSearchString = tmp
End Function

Abgelegt unter SQL, Ähnlichkeit, Suche, String.

1 Kommentare zum Snippet

Undeathly schrieb am 11/3/2011:
Hallo, wo finde ich die notwendigen Funktionen FindAndReplace und ArrExist bzw welche Imports muss ich noch machen?
 

Logge dich ein, um hier zu kommentieren!