Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Hilfe bei SQL Abfrage Firebird (https://www.delphipraxis.net/117444-hilfe-bei-sql-abfrage-firebird.html)

Hansa 18. Jul 2008 11:58

Re: Hilfe bei SQL Abfrage Firebird
 
Zitat:

Zitat von burn
Für was ist das wichtig ???

Anzahl der Datensätze, ungefähr ? Ich will einschätzen können, ob es überhaupt produktiv ist, das unbedingt über die DB zu machen. Frauen gehören um die Uhrzeit aber besser in die Küche. :duck:

nahpets 18. Jul 2008 12:10

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:
  • abc/12345
    abc\12345
    abc\12345a
    abc/12345X
das darf nicht sein:
  • abc/123a
    abc\12346
    abc\1244
Deine Abfrage geht auf:
  • abc_xyz
d. h.:

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:
TextTeil1 := 'abc';
TextTeil2 := '12345';

s := AnsiUpperCase(TextTeil1 + '_' + TextTeil2 + '_');
sagen der Datenbank aber, dass wir genau das nicht gefunden haben wollen, indem wir vor das like ein NOT stellen:
Delphi-Quellcode:
QSuche.SQL.Add('Select Feld1, Feld2, Feld3 from Tabelle where ');
QSuche.SQL.Add('UPPER(FELD1 COLLATE DE_DE) NOT like ' + QuotedStr(s));
Hoffe, das bringt Dich jetzt weiter.

Stephan

burn 18. Jul 2008 12:18

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:

die Frage mit dem Vorhandensein von entsprechenden Daten, meinte ich nicht böse, sorry, wenn es so rübergekommen ist.
Ist es nicht ...

Zitat:

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.
5 ziffern oder 4 Ziffern oder 3 Ziffern bald auch 6 Ziffern ...
und dann etweder mit Buchstabe oder auch ohne ...

Also wird das nix mit der Abfrage mit NOT.


mfg Burn

burn 18. Jul 2008 12:39

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

mkinzler 18. Jul 2008 12:43

Re: Hilfe bei SQL Abfrage Firebird
 
Ist halt nicht so performant

nahpets 18. Jul 2008 12:54

Re: Hilfe bei SQL Abfrage Firebird
 
Hallo,

heute bin ich schwer von Begriff:

Das darf sein (wobei a für einen beliebige Buchstaben steht)?
  • abc/123
    abc\123
    abc/123a
    abc\123a
    abc/1234
    abc\1234
    abc/1234a
    abc\1234a
    abc/12345
    abc\12345
    abc/12345a
    abc\12345a
    abc/123456
    abc\123456
    abc/123456a
    abc\123456a
Was vor dem / und \ stehen ist (für eine Abfrage) immer gleich?
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:
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')
Stephan

burn 18. Jul 2008 13:00

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:

Was vor dem / und \ stehen ist (für eine Abfrage) immer gleich?
Sind die ersten drei Zeichen hinter / und \ auch immer gleich?
1. Ja -> nur verschiedene Schreibeweisen Bsp: abc, ABC, aBc Abc etc
2. nein.

mfg Burn

mkinzler 18. Jul 2008 13:11

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 ...

burn 18. Jul 2008 13:26

Re: Hilfe bei SQL Abfrage Firebird
 
@ mkinzler
Zitat:

upper(substring( name from 4 for 1)) in ('A'..'Z')
hier meckert mich mein Prog. an ... anscheinend wird das in ('A'..'Z') nicht unterstüzt

edit :

Aber es geht
Delphi-Quellcode:
in ('A','B','C','D')
Und nun is Ende Gelände ... Muss erstmal den ganzen Input von heute aufn Punkt bringen...
Und dann schaun mer mal..

Nu aber wirklich ... Schönes WE ...

:dp:


mfg Burn

mkinzler 18. Jul 2008 13:47

Re: Hilfe bei SQL Abfrage Firebird
 
Oh war ja Delphi Syntax
aber
SQL-Code:
Between 'A' and 'Z'
sollte gehen


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:42 Uhr.
Seite 3 von 4     123 4      

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