AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Trim-Funktion bei Select-Abfrage?
Thema durchsuchen
Ansicht
Themen-Optionen

Trim-Funktion bei Select-Abfrage?

Ein Thema von WIng2005 · begonnen am 21. Okt 2008 · letzter Beitrag vom 21. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2      
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#1

Trim-Funktion bei Select-Abfrage?

  Alt 21. Okt 2008, 13:39
Datenbank: PostgreSQL • Zugriff über: zeos
Hallo Gemeinde,

ich versuche gerade, die Ergebnismenge einer Select-Abfrage um fehrende Lehrzeichen zu bereinigen. Hatte schon ein wenig geggogelt, meine aber, dass ich ein wenig auf dem Holzweg bin. Also sowas in der Art schwebt mir vor:

Delphi-Quellcode:
SELECT TRIM(a) FROM b WHERE a='x'

oder

SELECT a FROM b WHERE TRIM(a)='x'

vermeiden möchte ich:

SELECT a FROM b WHERE (a='x') or (a=' x')
Hintergrund ist, dass ich eine Spalte einer Tabelle abfragen möchte, deren Werte mal ein führendes Leerzeichen enthalten, und mal nicht. Die Variable x enthält ein solches nie. Mir scheint jedoch, dass TRIM nicht sonderlich geeignet ist hierfür....hoffe, dass mir jemand helfen kann.


MFG
Steffen
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

Re: Trim-Funktion bei Select-Abfrage?

  Alt 21. Okt 2008, 13:43
Überlege Dir, wie ein Index Dir helfen könnte.

Wenn die Spalte über einen Index verfügt, und Die nur ein oder zwei führende Leerzeichen hast, dann würde ich eine Abfrage mit OR wählen. Das geht am schnellsten.

Ansonsten bleibt dir nur die Abfrage mit "WHERE TRIM(A)='x'" und die Erkenntnis, das man Daten *vor* dem Abspeichern normalisieren sollte, damit man sie später auch schnell wieder findet.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#3

Re: Trim-Funktion bei Select-Abfrage?

  Alt 21. Okt 2008, 13:47
Naja, die Daten selbst sind nicht meinem Ursprung. Das Führende Leerzeichen identifiziert best. Produktgruppen.
Um jedoch flexibel abzufragen (x kann dabei für Teilenummern verschiedener Produktgruppen stehen) dachte ich an die Trim-Funktion. Leider funktioniert dass nur so nicht......

MFG
Steffen
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

Re: Trim-Funktion bei Select-Abfrage?

  Alt 21. Okt 2008, 13:52
Was funktioniert nicht?
Ich würde es mit einem 'OR' versuchen, da es sich nur um eine Alternative handelt (mit einem Leerzeichen/ ohne Leerzeichen).

Du kannst auch ein Union verwenden, das wird imho aber langsamer:
SQL-Code:
Select * from Tabelle where Spalte = 'x'
union
Select * from Tabelle where Spalte = ' x'
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

Re: Trim-Funktion bei Select-Abfrage?

  Alt 21. Okt 2008, 13:55
Hallo,

ausgehend von Deiner Fragestellung vermute ich mal:SELECT Trim(a) FROM b WHERE Trim(a) = 'x' Du scheinst ja sowohl bei der Wherebedingung ohne führendes Blank suchen zu wollen und die Ergebnismenge auch ohne führendes Blank zu erwarten.
In Bezug auf Ergebnismenge wäre natürlich das SELECT TRIM(a) FROM b WHERE a='x' richtig, berücksichtigt wird das führende Blank aber nicht bei der Auswahl der Ergebnismenge. In diesem Beispiel ist das Trim überflüssig, da ja die Wherebedingung nur Werte ohne führendes Blank liefert. Bei SELECT TRIM(a) FROM b WHERE a=' x' wäre das Trim aber angebracht, da hier ja Werte mit führendem Blank geliefert werden. Mit SELECT Trim(a) FROM b WHERE Trim(a) = 'x' schlägst Du dann beide Fliegen mit einer Klappe, aber unter Umgehung des Index, es sei denn, es gäbe eine Indexdefinition a la:create index OhneBlankA on b (Trim(a)) Falls sowas in der Art mit Postgres gehen sollte.

Inwieweit sind Werte mit führendem Blank in der Datenbank denn sinnvoll?
Wenn sie nicht sinnvoll sind, dann vor dem Speichern führende Blanks entfernen, ggfls. auch per Datenbanktrigger.
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#6

Re: Trim-Funktion bei Select-Abfrage?

  Alt 21. Okt 2008, 13:59
Mmmmh, Fehler(?) gefunden:

Delphi-Quellcode:
ich hatte:

SELECT a FROM b WHERE TRIM(a) = 'x'

ich sollte haben:

SELECT a FROM b WHERE TRIM(a,' ')='x'
Schaut aber schon ein wenig komisch aus..... jhabe ich zumindest so noch nicht gefunden.


Die Datenbank ist von unserem ERP, da habe ich wenig Einfluß drauf. Wie gesagt kennzeichnet das führende Blank eine spez. Warengruppe. Das zu ändern bekomme ich nicht durch.

MFG
Steffen
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

Re: Trim-Funktion bei Select-Abfrage?

  Alt 21. Okt 2008, 14:13
Hallo,
Zitat von WIng2005:
Delphi-Quellcode:
ich hatte:

SELECT a FROM b WHERE TRIM(a) = 'x'

ich sollte haben:

SELECT a FROM b WHERE TRIM(a,' ')='x'
hab' das gerade mal ausprobiert: Trim(a) sollten eigentlich Blanks entfernen (siehe postgresql/.../functions-string), mit Trim(a,'*') könnte man halt führende und folgende * entfernen.
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#8

Re: Trim-Funktion bei Select-Abfrage?

  Alt 21. Okt 2008, 14:26
Eigentlich hast du recht. Wenn ich jedoch Trim(a) im pgAdmin versuche, meckert er über fehlende Parameter.
Habe es mal im Delphi probiert, was auch nicht funktionierte. Trim(a,' ') wiederum geht auch hier.


MFG
Steffen
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

Re: Trim-Funktion bei Select-Abfrage?

  Alt 21. Okt 2008, 14:42
Zitat von WIng2005:
Wenn ich jedoch Trim(a) im pgAdmin versuche, meckert er über fehlende Parameter.
Bei mir meckert der nicht (Postgres 8.3), hast Du eventuell eine älter Datenbankversion?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#10

Re: Trim-Funktion bei Select-Abfrage?

  Alt 21. Okt 2008, 14:44
Zitat von WIng2005:
Wenn ich jedoch Trim(a) im pgAdmin versuche, meckert er über fehlende Parameter.
Bei mir meckert der nicht (Postgres 8.3), hast Du eventuell eine älter Datenbankversion?
  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 19:58 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