![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: Zeos-Komponenten
Hilfe bei SQL Abfrage Firebird
Hallo allerseits,
hätte da mal eine Frage zu einer SQL-Abfrage:
Delphi-Quellcode:
Normalerweise sollte die Abfrage mir doch Ergebnisse wieTextTeil1 := 'abc'; TextTeil2 := 'xyz'; s := AnsiUpperCase(TextTeil1 + '_' + TexTeil2 + '_'); QSuche.SQL.Add('Select Feld1, Feld2, Feld3 from Tabelle where '); QSuche.SQL.Add('UPPER(FELD1 COLLATE DE_DE) like ' + QuotedStr(s)); ... abcZxyzA, abcDxyzj, abc1xyz2 etc. liefern... Steht jedenfalls ![]() Aber die Ergebnis-Menge bleibt leer. Die Frage: Hab ich irgendwas vergessen, nicht beachtet oder nicht verstanden ?? mfg Burn |
Re: Hilfe bei SQL Abfrage Firebird
Es fehlt der Joker
Delphi-Quellcode:
Allerdings findet er dann alles was mit abc beginnet
TextTeil1 := 'abc%';
|
Re: Hilfe bei SQL Abfrage Firebird
@ mkinzler
Richtig ... genau das wollte ich ja vermeiden ... er soll eben nur die Datensätze finden die folgendermassen aufgebaut ist TextTeil1 ... dann etweder '/' oder '\' ... dann TextTeil2 ... dann ein beliebiger Buchstabe Bsp. a Also abc\xyza oder abc/xyzB oder auch abc\xyzP Vielleicht kann man die Abfrage auch anders gestalten ??? mfg Burn |
Re: Hilfe bei SQL Abfrage Firebird
Schreib dir eine UDF dafür oder FB ab 2.5.
|
Re: Hilfe bei SQL Abfrage Firebird
UDF fällt aus ... darf die DB nicht ändern ...
Oder kann man das auch ausserhalb der DB festlegen ??? Umstellung auf FB 2.5 wollen die Admins erst mal nicht machen ... mfg Burn |
Re: Hilfe bei SQL Abfrage Firebird
Du must die Funktionen in die DB importieren. Fällt also aus.
|
Re: Hilfe bei SQL Abfrage Firebird
Hallo,
da fällt mit momentan nur eine blöde Frage ein: Gibt es das, was Du suchst tatsächlich in der Datenbank? Ist mit auch mal passiert, bin an der Abfrage verzweifelt, bis ich dann feststellte, dass das, was ich bitte dringend raussuchen sollte, garnicht vorhanden war. Syntaktisch erscheint mir Deine Abfrage korrekt für die gestellte Aufgabe. Je nach Datenbank wir bei Like nicht zwischen Groß- und Kleinschreibung unterschieden, versuch's mal ohne Upper. Stephan |
Re: Hilfe bei SQL Abfrage Firebird
Geht so was nicht ?
SQL-Code:
Ist die Stelle an der der Substring steht von Bedeutung ?
SELECT * FROM TABLEX WHERE (NAME CONTAINING 'abc' AND BEZ CONTAINING 'z')
|
Re: Hilfe bei SQL Abfrage Firebird
@ nahpets
Natürlich gibt es das was ich suche ... Wenn die Abfrage lautet :
Delphi-Quellcode:
dann kommt ein Ergebnis ...
'Select Feld1,Feld2,Feld3 where UPPER(FELD1 COLLATE DE_DE) = ' + QuotedStr(AnsiUpperCase('abc\123a'))
Nur brauch ich das wie oben beschrieben ... Und ohne Upper geht nicht, da für das Feld welches abgefragt wird, zu viele Schreibweisen vorhanden sind. @ Hansa siehe #3 mfg burn |
Re: Hilfe bei SQL Abfrage Firebird
Bin mir ziemlich sicher, dass es einen SQL-Trick gibt, der mir gerade nicht einfällt. Aber im Zweifelsfall würde ich kurzen Prozess machen. :mrgreen: Lese notfalls die komplette Datenmenge mit möglichst großer Einschränkung. Also mit so was :
SQL-Code:
. Das dürfte dann nicht zuviel zurückliefern. Was dann noch übrigbleibt, das würde ich eben dann im Programm abfangen.
like 'abc%'
|
Re: Hilfe bei SQL Abfrage Firebird
@ Hansa
Die Abfrage 'abc%' würde ca 85 % aller Ergebnisse liefern... Sagen wir mal so ... In dem Feld welches ich auswerten möchte kann man einen "Pfad" eingeben (muss man aber nicht) Der Pfad fängt eben mit 'abc' an ... Ich brauch in der Ergebnis-Menge : alles was eben mit dem 'abc' anfängt ... Danach kommt ein '\' oder auch ein '/' dannach kommt eine 3-, 4- o. 5-stellige Zahl die aber evtl. noch ein Buchstabe enthält. Bsp 123a, 1234b, 12345X Bsp: ich Suche alles zu einer Zahl 12345 mit dem anfang 'abc' die dann Ergbnisse liefern muss wie: abc/12345, abc\12345, abc\12345a, abc/12345X etc. aber er soll nicht so sachen ausgeben wie: abc/123a, abc\12346, abc\1244 etc. mfg burn |
Re: Hilfe bei SQL Abfrage Firebird
Du könntest den Strinng per SQL auseinandernehmen und die Substrings filtern und
Oder Admin, wenn FB2.5 final verfügbar ist, zu dieser Version überreden, dann werden Reguläre Ausdrücke unterstützt. |
Re: Hilfe bei SQL Abfrage Firebird
Zitat:
|
Re: Hilfe bei SQL Abfrage Firebird
@hansa: Diese Abfrage filtert nur 15% weg und lässt 85% übrig.
|
Re: Hilfe bei SQL Abfrage Firebird
@ Hansa
Siehste mkinzler versteht mich... :mrgreen: mfg Burn |
Re: Hilfe bei SQL Abfrage Firebird
Hast du das mit dem Substringvergleich mal versucht?
|
Re: Hilfe bei SQL Abfrage Firebird
@mkinzler
Bis jetzt noch nicht dazu gekommen ... Wie muss ich mir das vorstellen ??? mfg Burn |
Re: Hilfe bei SQL Abfrage Firebird
Zitat:
|
Re: Hilfe bei SQL Abfrage Firebird
Zitat:
Größe der DB : 3.16 GB Für was ist das wichtig ??? mfg Burn |
Re: Hilfe bei SQL Abfrage Firebird
Zitat:
SQL-Code:
... where upper(substring( name from 1 for 3)) = 'ABC' and ...
|
Re: Hilfe bei SQL Abfrage Firebird
Zitat:
|
Re: Hilfe bei SQL Abfrage Firebird
Hallo Burn,
die Frage mit dem Vorhandensein von entsprechenden Daten, meinte ich nicht böse, sorry, wenn es so rübergekommen ist. Das darf sein:
Es werden nur Inhalte verglichen, bei denen in Feld1 ein Wert steht, der genau 7 Zeichen lang ist. Demnach wird hier keiner der von Dir aufgeführten falschen Werte gefunden. Ausgehend von Deinen Beispieldaten gehe ich einmal davon aus, das Dir 3 Zeichen vor / und \ bekannt sind, das dann 5 Ziffern und eventuell ein Buchstabe folgen. Damit kommen wir eventuell weiter: Wir setzen in den Filter das, was richtig ist:
Delphi-Quellcode:
sagen der Datenbank aber, dass wir genau das nicht gefunden haben wollen, indem wir vor das like ein NOT stellen:
TextTeil1 := 'abc';
TextTeil2 := '12345'; s := AnsiUpperCase(TextTeil1 + '_' + TextTeil2 + '_');
Delphi-Quellcode:
Hoffe, das bringt Dich jetzt weiter.
QSuche.SQL.Add('Select Feld1, Feld2, Feld3 from Tabelle where ');
QSuche.SQL.Add('UPPER(FELD1 COLLATE DE_DE) NOT like ' + QuotedStr(s)); Stephan |
Re: Hilfe bei SQL Abfrage Firebird
@mkinzler
Das teste ich heut abend mal aus ... jetzt leider keine Zeit ... @Hansa DB -> 105 Tabellen -> Die Tabelle die ich abfrage hat im Moment ca. 50000 Datensätze @nahpets Zitat:
Zitat:
und dann etweder mit Buchstabe oder auch ohne ... Also wird das nix mit der Abfrage mit NOT. mfg Burn |
Re: Hilfe bei SQL Abfrage Firebird
@mkinzler
Hab mir doch mach schnell die Zeit genommen für eine Testabfrage mit den Substring.. (Lassen wir mal meine eigentliche Arbeit einfach liegen :mrgreen:) Das könnte tatsächlich funzen ... werde das aber heute abend nochmal genauer untersuchen. Danke Dir schon mal den Tip... Melde mich wieder falls das Problem noch nicht behoben sein sollte.. Auch Dank an die anderen die mir helfen wollten ... :dp: Schönes WE ... mfg Burn |
Re: Hilfe bei SQL Abfrage Firebird
Ist halt nicht so performant
|
Re: Hilfe bei SQL Abfrage Firebird
Hallo,
heute bin ich schwer von Begriff: Das darf sein (wobei a für einen beliebige Buchstaben steht)?
Sind die ersten drei Zeichen hinter / und \ auch immer gleich? Würde das bedeuten, dass die von Dir gesuchten Werte immer kleiner oder größer als Dein Suchbegriff wären? Dann könnte das helfen:
SQL-Code:
Stephan
select * from tabelle
where upper(feld1 collate DE_DE) < upper('abc/12345') or upper(feld1 collate DE_DE) > upper('abc/12345z') or upper(feld1 collate DE_DE) < upper('abc\12345') or upper(feld1 collate DE_DE) > upper('abc\12345z') |
Re: Hilfe bei SQL Abfrage Firebird
@mkinzler
Jep hab ich grad gemerkt ... Und noch ein Problem tritt auf: Wie mach ich das: ich will alles zu 123 finden: also 123, 123a, 123b aber nicht 1234, 1235 etc @ stephan Das teste ich alles heut abend ... ich glaub mein Hirn platzt gleich :wall: zu viel Input :mrgreen: Zitat:
2. nein. mfg Burn |
Re: Hilfe bei SQL Abfrage Firebird
SQL-Code:
... where Upper(name) Starting with 'ABC' and upper(substring( name from 4 for 1)) in ('A'..'Z') and ...
|
Re: Hilfe bei SQL Abfrage Firebird
@ mkinzler
Zitat:
edit : Aber es geht
Delphi-Quellcode:
Und nun is Ende Gelände ... Muss erstmal den ganzen Input von heute aufn Punkt bringen...
in ('A','B','C','D')
Und dann schaun mer mal.. Nu aber wirklich ... Schönes WE ... :dp: mfg Burn |
Re: Hilfe bei SQL Abfrage Firebird
Oh war ja Delphi Syntax
aber
SQL-Code:
sollte gehen
Between 'A' and 'Z'
|
Re: Hilfe bei SQL Abfrage Firebird
@ mkinzler
Es geeeeeeeeht, es geeeeeeht ... ich wär bekloppt. Ich drück aufn Knop und es geeeeeht ... Besten Dank nun sollte ich zurecht kommen .... mfg Burn |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 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