Ich habe eine Tabelle Document
mit einigen Spalten z. DocumentTitle
. Sieht wie folgt aus:Abfrage für eine Liste von Zeichenfolge mit wie
Dokument
- Id (unique)
- Document (varchar (200))
in meiner Anwendung Sie eine Zeichenfolge eingeben Sie suchen nach "Rechnung 4711". Jetzt soll meine Anwendung nach allen Dokumenten suchen, in denen beide Wörter im Titel stehen. So Dokumente mit Titel foo4711.pdf
, invoice_bar.pdf
werden nicht gefunden. Dokumente mit dem Titel invoce 4711.pdf
oder test4711invoce.png
sollen gefunden werden.
Da ich dies in einer Prozedur schreibe, kann ich keine feste Parameteranzahl für Suchstrings festlegen. Ich bekomme einen Parameter, z.B. invoice 4711
und meine Split-Methode gibt eine Tabelle mit allen Elementen wie (und ja, mit dem% -Zeichen)
Artikel
% 4711%
% Rechnung%
Sooo, wenn ich jetzt versuche, alle Dokumente zu bekommen, wo diese beiden Werte übereinstimmen, bekomme ich ein falsches Ergebnis (aber, ja, es macht immer Sinn: D)
info: die fn_split- Funktion nimmt den Suchst als ersten Parameter und der zweite Parameter ist die in Scheiben geschnittenen Zeichen
select *
from document
WHERE 1 = (
select case
when document.documenttitle like items then 1 else 0 end
from fn_split('invoice 4711', ' ')
where document.documenttitle like items
);
select *
from document
inner join fn_split('invoice 4711', ' ')
on document.DocumentTitle like items
beide Abfragen gibt die Ergebnis, wo eines dieser Wörter enthalten ist - nicht beides. Irgendeine Idee, was das Problem hier ist? oder wie funktioniert die Abfrage richtig?
Zuerst die Datenstruktur, um eine richtige Junction-Tabelle für die Elemente zu haben. –
Hallo, was Sie suchen müssen, ist:% 4711% Rechnung% und% Rechnung% 4711%, also müssen Sie Ihre Split-Funktion in einer "Scrumbler" -Funktion ändern. Versuchen Sie etwas Ähnliches wie Select items + '%' von fn_split ('invoice 4711', '') a, fn_split ('invoice 4711', '') b Wo a.items <> b.items für xml path (' ') – GigiS
@GigiS was wäre wenn' Rechnung 4711 John Smith Texas '? – Serg