Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi sql- suche von bereichen mit wildcards (https://www.delphipraxis.net/81370-sql-suche-von-bereichen-mit-wildcards.html)

oldie 25. Nov 2006 23:19

Datenbank: Paradox • Version: 7 • Zugriff über: sql

sql- suche von bereichen mit wildcards
 
Hallo,

ich habe mir die Beiträge hier im Forum mal durchgesehen. Eine Kombination der gewünschten Abfrage habe ich nicht gefunden.

Ich habe Nummern z.B. 20060010 wobei ich nach Bereichen unter den letzten vier Zahlen suchen muss.

Ich habe es schon folgendermassen getestet:

SQL-Code:
    SELECT * FROM TableName WHERE TrAufNr BETWEEN (TrAufNr Like "____0001") AND (TrAufNr Like "____0999") ORDER BY TrAufNr DESC;
mal mit between/like. Es kommt aber immer Syntaxfehler. Hat jemand einen Tipp?

Gruß Klaus :roll:

Hansa 26. Nov 2006 00:30

Re: sql- suche von bereichen mit wildcards
 
Jetzt will ich Antwort geben und sehe gerade "Paradox". Was solls : lasse mal die überflüssigen """"" weg.

Edit : das betrifft den Syntaxerror. Der Suchbegriff müßte schon in ''. Den logischen Fehler verursachen wohl die __________ Nacht. 8)

Meniskusschaden 26. Nov 2006 08:40

Re: sql- suche von bereichen mit wildcards
 
Vielleicht funktioniert folgender Befehl:

SQL-Code:
SELECT *
FROM TableName
WHERE substr(TrAufNr, 5, 4) >= "0001") AND substr(TrAufNr, 5, 4) <= "0999"
ORDER BY TrAufNr DESC;

Meniskusschaden 26. Nov 2006 08:53

Re: sql- suche von bereichen mit wildcards
 
Mit BETWEEN müsste es auch gehen:

SQL-Code:
SELECT *
FROM TableName
WHERE substr(TrAufNr, 5, 4) BETWEEN '0001' AND '0999'
ORDER BY TrAufNr DESC;

alzaimar 26. Nov 2006 09:03

Re: sql- suche von bereichen mit wildcards
 
@oldie: Du darfst von einer Datenbank (nun gut, Paradox ist nur eine kleine Tabellenverwaltung) keine Wunder erwarten. Datenbanken (oder DBMS) sind einfach nur Programme, die Daten ziemlich schnell lesen und schreiben können. Nebenbei können sie auch noch nach bestimmten Kriterien suchen.

Das Suchen kann sehr schnell gehen oder auch nicht. Das hängt dann aber ausschließlich vom Programmierer ab. Du musst deine Tabellenspalten so definieren, das das DBMS auch schnell findet, was Du suchst.

Stell Dir einfach vor, so ein DBMS kann einfach nur sortieren und dann in so einer sortieren Liste schnell Sachen finden. In einer sortierten Liste kann man auch sehr schnell einen Bereich ausfindig machen: Untere Bereichsgrenze suchen, obere Bereichsgrenze suchen, und alles was dazwischen ist, gehört eben in den Bereich.

Mit deiner Suchanfrage muss aber das DBMS alle(!) Datensätze durchlaufen und bei jedem Datensatz prüfen, ob die Bedingung erfüllt ist. Das ist mehr als suboptimal, sondern der Tod einer jeden Datenbankapplikation. Sofern deine Daten nur aus ein paar hundert Datensätzen bestehen, Du viel Zeit hast und/oder alleine mit dem Programm arbeitest, ist das egal.

Du solltest deine Tabelle so erweitern, das die letzten vier Stellen der Auftragsnummer in einer gesonderten Spalte sind. Dann indexierst Du diese Spalte (a.k.a. mit der Datenbankoberfläche einen Sekundärindex erstellen) und dann kannst Du sehr elegant mit:
SQL-Code:
select * from Tablename where SubTrAuftrNr Between '0000' and '0999'
auf die Datensätze zugreifen (SubTrAuftrNr ist die oben erwähnte neue Spalte).

Grundsätzlich ist es keine gute Idee, Information, nach der man suchen will, in irgendwelchen Daten zu verwursten.

oldie 26. Nov 2006 17:58

Re: sql- suche von bereichen mit wildcards
 
Hallo,

danke für Eure Antworten

@Meniskusschaden: Beide Varianten bringen "Merkmal nicht vorhanden" auch ohne Klammerfehler

@alzaimar: Da kann ich Dir nur zustimmen. Das würde ich bei meinen Programmen auch nicht so machen. Leider kommt keiner an das Programm ran(Firma insolvent). Ich soll eine Anwendung schreiben die etwas mehr auswertet.

Gruß Klaus

marabu 26. Nov 2006 18:25

Re: sql- suche von bereichen mit wildcards
 
Hallo Klaus,

wenn TrAufNr ein alphanumerisches Feld ist, dann würde ich es so probieren:

SQL-Code:
SELECT * 
  FROM TableName
  WHERE SUBSTRING(TrAufNr FROM 1 FOR 5) = '20060'
  ORDER BY TrAufNr DESC
Freundliche Grüße vom marabu

oldie 26. Nov 2006 19:06

Re: sql- suche von bereichen mit wildcards
 
Hi Marabu,

<<wenn TrAufNr ein alphanumerisches Feld<< nein ein Integerfeld.

Gibt es so etwas wie StrToInt in SQL?

Gruß Klaus

mkinzler 26. Nov 2006 19:19

Re: sql- suche von bereichen mit wildcards
 
Gibt es weiteres Feld, in welchem das Jahr steht?
Vielleicht könnte man mit MOD was machen.

marabu 26. Nov 2006 19:40

Re: sql- suche von bereichen mit wildcards
 
Zitat:

Zitat von oldie
Gibt es so etwas wie StrToInt in SQL?

Du arbeitest bei Paradox übrigens mit einem Dialekt namens LocalSQL.

Du kannst SUBSTRING(CAST(TrAufNr AS CHAR(8)) FROM 1 FOR 5) verwenden.

Gute Nacht


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 Uhr.
Seite 1 von 2  1 2      

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