![]() |
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:
mal mit between/like. Es kommt aber immer Syntaxfehler. Hat jemand einen Tipp?
SELECT * FROM TableName WHERE TrAufNr BETWEEN (TrAufNr Like "____0001") AND (TrAufNr Like "____0999") ORDER BY TrAufNr DESC;
Gruß Klaus :roll: |
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) |
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; |
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; |
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:
auf die Datensätze zugreifen (SubTrAuftrNr ist die oben erwähnte neue Spalte).
select * from Tablename where SubTrAuftrNr Between '0000' and '0999'
Grundsätzlich ist es keine gute Idee, Information, nach der man suchen will, in irgendwelchen Daten zu verwursten. |
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 |
Re: sql- suche von bereichen mit wildcards
Hallo Klaus,
wenn TrAufNr ein alphanumerisches Feld ist, dann würde ich es so probieren:
SQL-Code:
Freundliche Grüße vom marabu
SELECT *
FROM TableName WHERE SUBSTRING(TrAufNr FROM 1 FOR 5) = '20060' ORDER BY TrAufNr DESC |
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 |
Re: sql- suche von bereichen mit wildcards
Gibt es weiteres Feld, in welchem das Jahr steht?
Vielleicht könnte man mit MOD was machen. |
Re: sql- suche von bereichen mit wildcards
Zitat:
Du kannst SUBSTRING(CAST(TrAufNr AS CHAR(8)) FROM 1 FOR 5) verwenden. Gute Nacht |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 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