SQL, RegEx oder doch was anderes?

Zvoni

Erfahrenes Mitglied
Mahlzeit!

Kann man per SQL (ANSI-SQL bzw. SQL für eine DB2 auf ner AS400) folgenden gordischen Knoten lösen?

Wir haben einen Artikelstamm, der hat unter anderem zwei Felder für die Artikelbezeichnung (in einer Datenbank-Tabelle).
In einer weiteren Tabelle sind nochmal diesselben Felder für die Fremdsprachen-Bezeichnungen (Diese lassen wir jetzt aber mal aussen vor).

Unsere Bezeichnungen haben aber die Dummheit, dass sie nicht homogen sind, da es zu viele User gibt, die das Recht haben, einen Artikel neu anzulegen bzw. zu ändern.

Beispiel:
User 1 legt so an: "ISO4762-M4x20-12.9" Text2="Zylinderschraube"
User 2 legt aber so an: "ISO 4762-8.8-A2F-M4x20" Text2="Zylinderschraube"
User 3 legt so an: "Zylinderschraube" und dann in Text2: "ISO4762-M4x20-Edelstahl A2"

Irgendein User möchte jetzt nachschauen, welche Artikel er in unserem System finden kann (Um Doppelvergabe von Artikelnummern zu vermeiden).
Wenn er jetzt nach Schreibweise 1 (Also NORM, ABMESSUNG, WERKSTOFF -> in dieser Reihenfolge) nach dem Artikel 3 sucht, hat er keine Chance diesen zu finden.

Mir wurde von meiner IT-Abteilung folgender Ansatz angeboten, wobei ich aber natürlich sofort erkannt habe, dass der so nie funktionieren wird:

SQL:
SELECT Teilenummer, Text1, Text2
FROM Teilestamm
WHERE Kriterium LIKE Text1
OR Kriterium LIKE Text2



Kriterium ist eine einzige Textbox, wo der User eben eingeben kann z.Bs. "ISO4762 M4x20 A2"

Lässt sich das irgendwie elegant per SQL lösen? Ich dachte da eben auch an den LIKE-Operator, aber ich bekomm es nicht hin. Entweder sehe ich den Wald vor lauter Bäumen nicht, oder ich benutze das falsche Werkzeug (In diesem Zusammenhang habe ich an RegEx gedacht, gebe jedoch zu, dass ich von RegEx keine Ahnung habe. Ich weiss nur, dass ich RegEx immer im Zusammenhang mit Mustererkennung gesehen habe).

Momentan löse ich das Problem folgendermassen (Der Client ist in VB6 geschrieben, also nix mit Webanwendung, PHP oder sowas):
Stringverkettung von Text1 und Text2 aus Datenbanktabelle zu einem einzigen String ("Suchstring")
Per Replace fliegen alle Bindestriche, Schrägstriche und Leerzeichen aus Suchstring raus (Binde- und/oder Schrägstriche dienen bei uns als Separator einzelner Bestandteile einer Artikelbezeichnung - siehe Beispiele oben)
Aufsplitten des Suchtextes aus der Textbox per Split-String auf das/die Leerzeichen (Daraus erhalte ich ein Array der einzelnen Suchkriterien)
Per sequentiellem Durchlauf durch die Tabelle wird geprüft, ob alle Elemente meines Arrays irgendwo in Suchstring enthalten sind (Reihenfolge egal).

Aber irgendwann ist da halt einfach die Performance zu Ende (bei mittlerweile weit über 100.000 Einträgen)


Irgendeine Idee, wie man das eleganter lösen kann?
 
Zuletzt bearbeitet von einem Moderator:
Zurück