Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird 3 SQL verstehe ich nicht? (https://www.delphipraxis.net/213192-firebird-3-sql-verstehe-ich-nicht.html)

HCB 12. Jun 2023 18:29

Datenbank: Firebird 3 • Version: 3 • Zugriff über: FireDac

Firebird 3 SQL verstehe ich nicht?
 
Hallo, ich kapiere nicht warum folgende Abfrage unter Firebird nicht funktioniert:

select * from ARTIKEL where ARTIKELNR = '1063040' //Es werden 0 Datensätze angezeigt obwohl dieser Artikel vorhanden ist
select * from ARTIKEL where ARTIKELNR < '1063040' // funktioniert, alle die kleiner sind werden gelistet
select * from ARTIKEL where ARTIKELNR > '1063030' // funktioniert, alle die größer sind werden gelistet auch der 1063040

WARUM zum Kuckuck wird dieser mit = nicht gefunden????
Hat jemand einen Rat für mich?

LG Harry

Uwe Raabe 12. Jun 2023 18:38

AW: Firebird 3 SQL verstehe ich nicht?
 
Trailing Blank?

MyRealName 13. Jun 2023 10:33

AW: Firebird 3 SQL verstehe ich nicht?
 
Entweder TRIM Über das Feld ArtikelNr oder versuch es mit LIKE

HCB 13. Jun 2023 15:20

AW: Firebird 3 SQL verstehe ich nicht?
 
Vielen Dank euch beiden,

mit TRIM funktioniert es. Wahrscheinlich sind die Artikelnummen in der Tabelle rechtsbündig angelegt.

LG Harry

IBExpert 13. Jun 2023 18:59

AW: Firebird 3 SQL verstehe ich nicht?
 
kann auch datentype problem sein, wenn char dann immer mit leerzeichen hinten aufgefüllt gespeichert, beim varchar nicht und auch dadurch kann sich so was auch mal logisch auflösen

Jasocul 14. Jun 2023 06:15

AW: Firebird 3 SQL verstehe ich nicht?
 
Zitat:

Zitat von HCB (Beitrag 1523353)
mit TRIM funktioniert es. Wahrscheinlich sind die Artikelnummen in der Tabelle rechtsbündig angelegt

Wenn du auf dem Feld einen Index/PK hast, zerschießt dir das Trim die Performance, weil der Index nicht mehr genutzt werden kann.
Falls das so ist, solltest du nochmal über die richtige Datenhaltung oder Formatierung der Artikelnummer nachdenken.

Delphi.Narium 15. Jun 2023 10:27

AW: Firebird 3 SQL verstehe ich nicht?
 
Muss die Artikelnummer überhaupt formatiert werden? (Und wenn ja, warum in der Datenbank und nicht in der Anzeige?)

Ist sie alphanummerisch oder nummerisch. Sollte sie nummerisch sein, wäre es durchaus sinnvoll, sie auch nummerisch in der Datenbank abzulegen.

Ist sie als Char gespeichert, dann muss man bei der Suche die zu suchende Zeichenfolge auf die entsprechende Länge des Datenbankfeldes bringen. Sprich: entsprechend viele Leerzeichen anhängen.

Wenn die Artikelnummer rechtsbündig in der Datenbank abgelegt ist, dann muss man bei der Suche via SQL das berücksichtigen und die zu suchende Zeichenfolge links mit der entspechenden Anzahl von Leerzeichen auf die entsprechende Länge für die rechtsbündige Ablage in der Datenbank bringen, dann braucht man auch kein Trim.

Damit der Index nicht kaputtgeht (sprich auch mit Trim genutzt werden kann) könnte man ihn eventuell so anlegen:
SQL-Code:
create index ix_artikelnr computed by (trim(artikelnr))


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 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