![]() |
Datenbank: SQL • Zugriff über: ADO
LIKE
Hallo Leute ich hab eine Montag morgen frage
SELECT * FROM firma WHERE firmen_plz LIKE '+ QuotedStr(str_1) + ' AND firmen_bez LIKE ' + QuotedStr(str_2) + ' order by firmen_bez' Diese Abfrage führt er so aus als wär das AND ein OR. Er schränkt nicht auf beide Spalten ein sondern nur auf eine. Kann mir hier wer weiterhelfen? |
Re: LIKE
Was steht den z.B. in str_1 und str_2? Das Statement sieht doch ok aus, bei 'like' könnte es logisch richtig sein was die Datenbank dir da wieder gibt.
|
Re: LIKE
str_1 := '9';
str_2 := 'sch'; Er gibt mir aber auch Einträge zurück, die nicht 9 in der PLZ enthalten. |
Re: LIKE
Was erhältst du denn für ein Ergebnis, wenn du an deine Strings noch ein '%' hängst. Ansonsten macht die Verwendung von LIKE sowieso keinen Sinn, da es die langsamste Vergleichsoperation ist, die SQL zu bieten hat.
Grüße Mikhal |
Re: LIKE
Bei mir gibt die Abfrage eine leere Menge zurück, da keine Joker-Zeichen enthalten sind (Oracle). Mit den entsprechenden Zeichen läuft es aber genau, wie gewünscht.
|
Re: LIKE
str_1 := '%' + str_1 + '%';
str_2 := '%' + str_2 + '%'; hab hab ich vorangestellt funktioniert aber nicht das like geht schon aber ich will nur einträge erhalten, die auf beide spalten zutreffen. ich bekomme aber auch einträge zurück, die nur auf eine Spalte zutreffen. das AND ist so wie ein OR |
Re: LIKE
bist du sicher, dass du nicht nur dein Statement falsch verstehst? Bei %9% ist ja jede Postleitzahl gültig, die irgendwo eine 9 hat. Das können schon ne Menge sein.
Welche DB benutzt du eigentlich? M$-SQL? Poste doch mal ne Ergebnismenge. |
Re: LIKE
Lass dir die Werte vor der Ausführung des SQL-Statements mal anzeigen.
|
Re: LIKE
Welche Datenbank verwendest du eigentlich, MS SQL Server MySQL?
Wie Jasocul bereits mitteilte, funktinioniert es bei Oracle wie erwartet und nach meinen Erfahrungen sollte auch MS SQL Server, Firebird und PostgreSQL wie erwartet arbeiten. Grüße Mikhal |
Re: LIKE
SELECT * FROM FIRMA WHERE firmen_plz LIKE '+ QuotedStr(str_1) + ' OR firmen_bez LIKE ' + QuotedStr(str_2) + ' order by firmen_bez
SELECT * FROM FIRMA WHERE firmen_plz LIKE '+ QuotedStr(str_1) + ' AND firmen_bez LIKE ' + QuotedStr(str_2) + ' order by firmen_bez Die beiden geben das gleiche zurück egal ob AND oder OR das ist mein Problem Ja ich will alle PLZ zurückbekommen die eine 9 vorhanden haben egal wo und alle die einen bestimmten string im Namen aufweisen. aber nur solche einträge, bei den beide einschränkungen zutreffen |
Re: LIKE
Verwende SQL SERVER
|
Re: LIKE
Versuch es mal mit Klammerung der Filter
Delphi-Quellcode:
Grüße
SELECT * FROM FIRMA WHERE (firmen_plz LIKE '+ QuotedStr(str_1) + ') OR (firmen_bez LIKE ' + QuotedStr(str_2) + ') order by firmen_bez
Mikhal |
Re: LIKE
hab ich auch schon versucht aber leider funktionierts auch nicht
NICHT OR sondern AND aber is ja egal, da die beiden bei mir das gleiche zurückgeben |
Re: LIKE
Also, ich habs gerade mal unter MS-SQL getestet und auch da funktioniert es wie erwartet. Von daher behaupte ich mal, dass das Statement in Ordnung ist, aber mit deinen Werten etwas nicht stimmt. Hast du mal überprüft, ob die Werte am Ende auch korrekt bespielt sind? Evtl. mal im Profiler, zumindest aber im Debugger anschauen!
|
Re: LIKE
Statement und werte sind in ordnung
ich hab nur das problem das die 2 das gleiche zurückliefern, ist das bei LIKE normal? SELECT * FROM FIRMA WHERE firmen_plz LIKE '+ QuotedStr(str_1) + ' OR firmen_bez LIKE ' + QuotedStr(str_2) + ' order by firmen_bez SELECT * FROM FIRMA WHERE firmen_plz LIKE '+ QuotedStr(str_1) + ' AND firmen_bez LIKE ' + QuotedStr(str_2) + ' order by firmen_bez |
Re: LIKE
Nein. Außer bei Sonderfällen, die wir aber hier nicht betrachten.
|
Re: LIKE
Nein, ist es nicht.
Bei MS SQL solltest Du zwingend die Platzhalter verwenden. Teste die Statements mal einzeln (also nur den Part mit 9 in der PLZ und dann nur den Part mit 'sch' im Namen z.B.). Wenn die funktionieren, dann muss eine And-Verknüpfung der beiden Teile auch funktionieren. Ich denke das durch das fehlen der Platzhalter die Abfragen unscharf werden und daher ungewollte Ergebnisse liefern. |
Re: LIKE
einzeln gehen sie. ich habs bereits getestet
was meinst du mit platzhalter Parameter? ich bin am verzweifeln |
Re: LIKE
Hast Du mal probiert im Query Analyzer die Abfrage so auszuführen, also ohne Variablen?
Probier doch mal per ODBC das ganze in Access (oder irgendwas anderem) auszuführen. Auch bei mir kommen unterschiedliche Werte mit AND oder OR raus. |
Re: LIKE
Das Statement ist definitiv in Ordnung. Es funktioniert ja auch unter MS-SQL. Habs ja sogar getestet. Also muss es an falschen/fehlenden Werten liegen.
Ansonsten bau das Statement mal hardcoded rein. Also
Delphi-Quellcode:
'SELECT * FROM FIRMA WHERE firmen_plz LIKE ''%9%'' OR firmen_bez LIKE ''%sch%' order by firmen_bez'
|
Re: LIKE
ES geht es geht, aber fragt nicht warum
danke euch alle für diese schwierige geburt str_1 := '%' + str_1 + '%'; str_2 := '%' + str_2 + '%'; 'SELECT * FROM FIRMA WHERE firmen_plz LIKE '''+str_1+''' AND firmen_bez LIKE '''+str_2+''' order by firmen_bez' |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz