Einzelnen Beitrag anzeigen

alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#19

Re: Falsche Zeichen in einem DB-Feld per SQL finden

  Alt 16. Jul 2008, 22:30
Hi

du könntest neben dem Feld SCANCODE ein zweites Feld z.B. "SCANCODE_CLEARED" in der Tabelle führen in der die bereinigten Scancodes stehen.
Dieses Feld "SCANCODE_CLEARED" wird immer durch einen Insert/Update-Trigger gesetzt.


SQL-Code:
CREATE OR ALTER TRIGGER SCANCODES_BI FOR SCANCODES
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GEN_SCANCODES_ID,1);

  NEW.SCANCODE_CLEARED = 'F'||F_STRIPSTRINGHOLD( F_STRCOPY(NEW.SCANCODE, 1, 10), '0123456789');
END
F_STRIPSTRINGHOLD() und F_STRCOPY() sind Funktionen aus der FreeAdHocUDF.
Die musst du natürlich vorher einbinden.

Abfrage für fehlerhaften Sätze:
SQL-Code:
select
  S.ID,
  S.SCANCODE,
  S.SCANCODE_CLEARED
from
  SCANCODES S
where
  S.SCANCODE <> S.SCANCODE_CLEARED
Abfrage für korrekte Sätze:
SQL-Code:
select
  S.ID,
  S.SCANCODE,
  S.SCANCODE_CLEARED
from
  SCANCODES S
where
  S.SCANCODE = S.SCANCODE_CLEARED
Das geht natürlich auch ohne extra Feld nur mit einen Select-Statement.
Kommt darauf an wie oft du Werte benötigst.
SQL-Code:
select
  S.ID,
  S.SCANCODE,
  'F'||F_STRIPSTRINGHOLD( F_STRCOPY(S.SCANCODE, 1, 10), '0123456789')
from SCANCODES S
where
  S.SCANCODE <> 'F'||F_STRIPSTRINGHOLD( F_STRCOPY(S.SCANCODE, 1, 10), '0123456789')
alex
Alexander
  Mit Zitat antworten Zitat