AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MS-SQL Abfrage mit where Like
Thema durchsuchen
Ansicht
Themen-Optionen

MS-SQL Abfrage mit where Like

Ein Thema von EarlyBird · begonnen am 26. Feb 2010 · letzter Beitrag vom 27. Feb 2010
Antwort Antwort
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#1

MS-SQL Abfrage mit where Like

  Alt 26. Feb 2010, 20:35
Datenbank: MsSql express • Version: 2005 • Zugriff über: Devart SDAC Components
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:
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:
 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
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#2

Re: MS-SQL Abfrage mit where Like

  Alt 26. Feb 2010, 21:00
Hallo,

Verknüpf das ganze doch einfach...
Select * from Artikel where SearchStr like '%sch%fest%or 'fest%%sch%' Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#3

Re: MS-SQL Abfrage mit where Like

  Alt 26. Feb 2010, 21:04
Danke für den Tipp.
Aber was mache ich bei 3,4,5,6 oder mehr Suchbegriffen
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#4

Re: MS-SQL Abfrage mit where Like

  Alt 26. Feb 2010, 21:09
Eventuell so...
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
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#5

Re: MS-SQL Abfrage mit where Like

  Alt 26. Feb 2010, 21:17
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]);
...
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: MS-SQL Abfrage mit where Like

  Alt 27. Feb 2010, 06:42
Bei MSSQL gibt es auch eine Volltextsuche. Eventuell bringt dich das weiter.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#7

Re: MS-SQL Abfrage mit where Like

  Alt 27. Feb 2010, 08:08
@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: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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:34 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