AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi sql- suche von bereichen mit wildcards
Thema durchsuchen
Ansicht
Themen-Optionen

sql- suche von bereichen mit wildcards

Ein Thema von oldie · begonnen am 26. Nov 2006 · letzter Beitrag vom 27. Nov 2006
Antwort Antwort
Seite 1 von 2  1 2      
oldie

Registriert seit: 18. Jul 2006
36 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

sql- suche von bereichen mit wildcards

  Alt 26. Nov 2006, 00:19
Datenbank: Paradox • Version: 7 • Zugriff über: sql
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:

    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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: sql- suche von bereichen mit wildcards

  Alt 26. Nov 2006, 01:30
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)
Gruß
Hansa
  Mit Zitat antworten Zitat
Meniskusschaden

Registriert seit: 1. Apr 2006
27 Beiträge
 
#3

Re: sql- suche von bereichen mit wildcards

  Alt 26. Nov 2006, 09:40
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;
  Mit Zitat antworten Zitat
Meniskusschaden

Registriert seit: 1. Apr 2006
27 Beiträge
 
#4

Re: sql- suche von bereichen mit wildcards

  Alt 26. Nov 2006, 09:53
Mit BETWEEN müsste es auch gehen:

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

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: sql- suche von bereichen mit wildcards

  Alt 26. Nov 2006, 10:03
@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:
select * from Tablename where SubTrAuftrNr Between '0000and '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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
oldie

Registriert seit: 18. Jul 2006
36 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: sql- suche von bereichen mit wildcards

  Alt 26. Nov 2006, 18:58
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: sql- suche von bereichen mit wildcards

  Alt 26. Nov 2006, 19:25
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
  Mit Zitat antworten Zitat
oldie

Registriert seit: 18. Jul 2006
36 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: sql- suche von bereichen mit wildcards

  Alt 26. Nov 2006, 20:06
Hi Marabu,

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

Gibt es so etwas wie StrToInt in SQL?

Gruß Klaus
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: sql- suche von bereichen mit wildcards

  Alt 26. Nov 2006, 20:19
Gibt es weiteres Feld, in welchem das Jahr steht?
Vielleicht könnte man mit MOD was machen.
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: sql- suche von bereichen mit wildcards

  Alt 26. Nov 2006, 20:40
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 Uhr.
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