AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL Where mit Stringbereich

SQL Where mit Stringbereich

Ein Thema von waldforest · begonnen am 19. Aug 2015 · letzter Beitrag vom 19. Aug 2015
Antwort Antwort
nahpets
(Gast)

n/a Beiträge
 
#1

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
 
#2

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
 
#3

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
 
#4

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
 
#5

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
Online

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

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
waldforest

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

AW: SQL Where mit Stringbereich

  Alt 19. Aug 2015, 14:51
hab's mal probiert, vielleicht habe ich noch einen Fehler, aber das Ergebnis passt nicht


Ergänzung: geht mit <= im zweiten Statement

Delphi-Quellcode:
  
if Trim(edt_InvStart.Text) <>'then
         SQL.Add( ' AND SUBSTRING(A.ART_INV from 1 for '+IntToStr(LENGTH(TRIM(edt_InvStart.Text)))+') >= '+QuotedStr(TRIM(edt_InvStart.Text)));
if Trim(edt_InvEnde.Text) <>'then
         SQL.Add( ' AND SUBSTRING(A.ART_INV from 1 for '+IntToStr(LENGTH(TRIM(edt_InvEnde.Text)))+') <= '+QuotedStr(TRIM(edt_InvEnde.Text)));
mfg wf

Geändert von waldforest (19. Aug 2015 um 15:20 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:08 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