AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL Where mit Stringbereich
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Where mit Stringbereich

Ein Thema von waldforest · begonnen am 19. Aug 2015 · letzter Beitrag vom 19. Aug 2015
Antwort Antwort
Seite 1 von 2  1 2      
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#1

SQL Where mit Stringbereich

  Alt 19. Aug 2015, 07:53
Datenbank: Firebird • Version: 2.5 • Zugriff über: zeos
Hallo,
ich möchte gerne eine Abfrage über einen Bereich von Strings durchführen.

z.B. beginnt eine Artikel-Inventarkürzel mit Buchstaben A - K, gefolgt von weiteren Chars.

Nun möchte ich z.B. alle Artikel mit Inventarkürzel AAB bis BAC auflisten. Hierzu gehören z.B. AAB2, AAB3, AAB4 .....

Aktuell habe ich versucht dies über
Delphi-Quellcode:
WHERE
     A.ART_INV >= '+QuotedStr(TRIM(edt_InvStart.Text)+'%')
AND A.ART_INV <=
'+QuotedStr(TRIM(edt_InvEnde.Text)+'%')
umzusetzten.
Allerdings werden die >= <= nicht berücksichtigt wenn z.B. nach
>= 'AA' und <= 'AA' zur Abfrage aller AA eingegeben wird, die Abfrage bleibt leer.
wenn die Abfrage
>= 'AA' und <= 'AD' erfolgt die Ausgabe aller AA, AB, AC allerdings ohne AD.

Was mach ich hier falsch ? warum funktioniert >= und <= nicht, wie kann man so etwas realisieren ?
mfg wf

Geändert von waldforest (19. Aug 2015 um 07:55 Uhr)
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#2

AW: SQL Where mit Stringbereich

  Alt 19. Aug 2015, 07:59
ADxxxx ist größer als AD, demnach solltest Du nach < AE suchen.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: SQL Where mit Stringbereich

  Alt 19. Aug 2015, 08:09
AAD123 ist größer als AAD, daher kommt nix bei Wert<=AAD.
Du musst also die nur die ersten 3 Zeichen von Wert angucken:

Substr(Wert,1,3)<=AAD usw. wobei Substr ist Oracle, keine Ahnung wie das bei deinem DBMS heißt.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
171 Beiträge
 
Delphi XE2 Professional
 
#4

AW: SQL Where mit Stringbereich

  Alt 19. Aug 2015, 08:12
Versuche es mal so:

Code:
WHERE
  (SUBSTR(A.ART_INV from 1 for 2) >= 'AA') AND
  (SUBSTR(A.ART_INV from 1 for 2) <= 'AD')
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: SQL Where mit Stringbereich

  Alt 19. Aug 2015, 11:25
Hallo,

das '%' in Deiner Bedingung dürfte zu Irritationen führen, es dient als Platzhalter für beliebige Zeichenfolgen beim Like, aber nicht bei Vergleichen mit <= oder >=.

eventuell könnte aus auch so gehen:
Code:
'WHERE A.ART_INV >= ' + QuotedStr(TRIM(edt_InvStart.Text)
+ 'AND A.ART_INV <= ' + QuotedStr(TRIM(edt_InvEnde.Text) + 'z')
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: SQL Where mit Stringbereich

  Alt 19. Aug 2015, 11:41
eventuell könnte aus auch so gehen:
Code:
'WHERE A.ART_INV >= ' + QuotedStr(TRIM(edt_InvStart.Text)
+ 'AND A.ART_INV <= ' + QuotedStr(TRIM(edt_InvEnde.Text) + 'z')
Dann würden Alle Nummern mit AAz00... ebenfalss hinten herunter fallen!
wie wäre es mit
Code:
maxwert:=TRIM(edt_InvEnde.Text);
maxwert[length(maxwert)]:=succ(maxwert[length(maxwert)]);
'WHERE A.ART_INV >= ' + QuotedStr(TRIM(edt_InvStart.Text)
+ 'AND A.ART_INV <= ' + QuotedStr(maxwert)
(sofern succ überhaupt mit char umgehen kann).

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

AW: SQL Where mit Stringbereich

  Alt 19. Aug 2015, 11:48
Anstelle von 'z' müsste ein Wert stehen, der größer als alles Andere, was da so vorkommen kann, ist.

Oder anders formuliert:
Code:
QuotedStr(TRIM(edt_InvEnde.Text) + 'z')
müsste, Aufgrund des Vergleiches mit '<=' den größtmöglichen Wert von
Code:
A.ART_INV
für den konkreten Vergleich repräsentieren.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: SQL Where mit Stringbereich

  Alt 19. Aug 2015, 12:16
Ich würde mir mit zwei Abfragen per LIKE jeweils den ersten und den letzen Eintrag heraussuchen und damit dann die echte Abfrage starten.

UPDATE

Ok, es geht auch komplett in einer Abfrage
SQL-Code:
SELECT * FROM A
WHERE
  ART_INV LIKE 'AAB%
OR
  ART_INV LIKE 'BAD%'
OR
  ( ART_INV > 'AABAND ART_INV < 'BAD' )
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (19. Aug 2015 um 12:49 Uhr)
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: SQL Where mit Stringbereich

  Alt 19. Aug 2015, 13:39
Hallo,
klasse Umsetzung von Sir Rufo funktioniert, vielen Dank !!

Ergänzende Info:
vielleicht hatte ich nicht erwähnt, dass die Art_Inv insgesamt 8 Zeichen groß ist
Wenn nun der bis - String mehr Zeichen als der Von-String hat. ist es noch nicht sauber.
z.B.
Delphi-Quellcode:
SELECT * FROM A
WHERE
  ( ART_INV LIKE 'AA%and AND ART_INV < 'AAD2' )
OR
   ART_INV LIKE 'AAD2%'
OR
   ( ART_INV > 'AABAND ART_INV < 'AAD2' )
In diesem Fall würden auch alle AAV mit ausgegeben. Liegt an der ersten Bedingung
ART_INV LIKE 'AA%', somit ist die Bedingung noch zu erweitern
mfg wf

Geändert von waldforest (19. Aug 2015 um 14:30 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#10

AW: SQL Where mit Stringbereich

  Alt 19. Aug 2015, 14:44
Was ist den gegen die Substr-Variante einzuwenden. Sollte das folgende nicht das selbe Ergebnis liefern?

Delphi-Quellcode:
SELECT * FROM A
WHERE Substr(ART_INV,1,2)>='AAAND Substr(ART_INV,1,4)<='AAD2'
Ralph
  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 06:32 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