Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MS-SQL Abfrage mit where Like (https://www.delphipraxis.net/148292-ms-sql-abfrage-mit-where-like.html)

EarlyBird 26. Feb 2010 20:35

Datenbank: MsSql express • Version: 2005 • Zugriff über: Devart SDAC Components

MS-SQL Abfrage mit where Like
 
Hallo,
mit Format erstelle ich den SuchString für eine Abfrage.
z.B. wird aus 'Sch Fest' = '%sch%fest%'

Die Abfrage sieht dann vereinfacht wie folgt aus:
SQL-Code:
Select * from Artikel where SearchStr like '%sch%fest%'
Das klappt so weit auch prima.
Nun möchte ich aber gerne das die Reihenfolge der Suchbegriffe keine rolle spielt.
Bei der Eingabe von 'Sch Fest' sollen z.B. folgende Artikel gefunden werden:
"Schrauben für Festplatte"
"Festplattenschrauben"

Mit:
SQL-Code:
 Select * from Artikel where SearchStr like '%sch%' and SearchStr like '%fest%'
bekomme ich das schon hin.
Aber da gibt es doch bestimmt eine bessere Lösung?
Die Anzahl der Suchbegriffe ist übrigens nicht begrenzt.

Besten Dank für Eure Hilfe
EarlyBird

Jens Hartmann 26. Feb 2010 21:00

Re: MS-SQL Abfrage mit where Like
 
Hallo,

Verknüpf das ganze doch einfach...
SQL-Code:
Select * from Artikel where SearchStr like '%sch%fest%' or 'fest%%sch%'
Gruß Jens

EarlyBird 26. Feb 2010 21:04

Re: MS-SQL Abfrage mit where Like
 
Danke für den Tipp.
Aber was mache ich bei 3,4,5,6 oder mehr Suchbegriffen

Jens Hartmann 26. Feb 2010 21:09

Re: MS-SQL Abfrage mit where Like
 
Eventuell so...
SQL-Code:
Select * from Artikel where SearchStr like '%sch%fest%' or 'fest%%sch%' or '%Ha%llo%' or 'oll%%ah%'
Je nach größe würde ich das ganze in eine Stringliste packen und durch ein for Schleife laufen lassen.

Gruß Jens

Jens Hartmann 26. Feb 2010 21:17

Re: MS-SQL Abfrage mit where Like
 
Müsste ungefähr so funktionieren. Wenn Du es mit der StringList machen würdest, ist es aufjedenfall egal wieviele Varianten Du suchen würdest..
Delphi-Quellcode:
Qry_SQLTest.SQL.Add('Select * from Artikel where SearchStr like ');
Slsql := TStringList.Create;
Slsql.Add('sch');
Slsql.Add('Test');
Slsql.Add('Warum');
Slsql.Add('Es');
for i := 0 to Slsql.Count - 1 do
  Qry_SQLTest.SQL.Add('or '+Slsql[i]);
...

alzaimar 27. Feb 2010 06:42

Re: MS-SQL Abfrage mit where Like
 
Bei MSSQL gibt es auch eine Volltextsuche. Eventuell bringt dich das weiter.

EarlyBird 27. Feb 2010 08:08

Re: MS-SQL Abfrage mit where Like
 
@alzaimar Danke für den Tip
"CONTAINS" werde ich mir mal genauer ansehen.

Ich glaube aber das Volltextsuche in der Expressedition nicht möglich.

Gibt es nicht die Möglichkeit:
SQL-Code:
Select * from Artikel where ['%suchbegriff1%', '%suchbegriff2%', '%suchbegriff3%', '%suchbegriff4%'] in SearchStr
oder so ähnlich?

@Jens
Das funktioniert so nicht
Delphi-Quellcode:
Qry_SQLTest.SQL.Add('Select * from Artikel where SearchStr like ');
Slsql := TStringList.Create;
Slsql.Add('sch');
Slsql.Add('Test');
Slsql.Add('Warum');
Slsql.Add('Es');
for i := 0 to Slsql.Count - 1 do
  Qry_SQLTest.SQL.Add('or '+Slsql[i]);
...
So klappt es

Delphi-Quellcode:
Qry_SQLTest.SQL.Add('Select * from Artikel where SearchStr like ');
Slsql := TStringList.Create;
Slsql.Add('sch');
Slsql.Add('Test');
Slsql.Add('Warum');
Slsql.Add('Es');
for i := 0 to Slsql.Count - 1 do
  Qry_SQLTest.SQL.Add('and SearchStr like ' + Slsql[i]);
...
Aber genau das wollte ich ja "anders" "besser" "eleganter" lösen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz