AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [SQL] where-Clause auf Stringfeld, in dem nur Zahlen stehen
Thema durchsuchen
Ansicht
Themen-Optionen

[SQL] where-Clause auf Stringfeld, in dem nur Zahlen stehen

Ein Thema von el toppo · begonnen am 27. Apr 2006 · letzter Beitrag vom 27. Apr 2006
Antwort Antwort
Benutzerbild von el toppo
el toppo

Registriert seit: 27. Apr 2004
Ort: Aschheim
28 Beiträge
 
Delphi 7 Enterprise
 
#1

[SQL] where-Clause auf Stringfeld, in dem nur Zahlen stehen

  Alt 27. Apr 2006, 18:40
Datenbank: Firebird • Version: 1.5 • Zugriff über: BDE
Hallo,

ich bräuchte mal bitte einen kleinen Tip.

Ich hab eine Artikeldatenbank, in der das Feld Artikelnummer ein String-Feld ist. Jetzt möchte ich alle Artikel haben, bei denen die Artikelnummer nur aus Zahlen besteht. Es gibt also Artikel, die haben in der Artikelnummer Buchstaben, Leer- und Sonderzeichen. Und das in jeder erdenklichen Konstelation. All diese Artikel möchte ich löschen.
Ich komm aber einfach nicht weiter, das in einer einzigen SQL-Abfrage unterzubringen.
Der erste Gedanke war ein Cast auf die Artikelnummer in Integer, aber da das ganze in ein Script soll, kann ich da leider nicht auf Fehler reagieren, wenn einer auftritt, stopt das Script.

Habt Ihr nen Tip, wie man sowas bewerkstelligen könnte?

Grüsse vom
el Toppo
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: [SQL] where-Clause auf Stringfeld, in dem nur Zahlen ste

  Alt 27. Apr 2006, 19:02
Das Problem wird sich nur mit einer SP lösen lassen.
Markus Kinzler
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: [SQL] where-Clause auf Stringfeld, in dem nur Zahlen ste

  Alt 27. Apr 2006, 19:08
Du kannst auch mehrere DELETE Anweisungen nacheinander absetzen.
DELETE FROM Artikel WHERE IdArtikel <> Trim(IdArtikel) Wenn deine Artikelnummer z.B. immer 10-stellig ist:
DELETe FROM Artikel WHERE IdArtikel > '9999999999OR IdArtikel < '0000000000' So werden die ungeliebten Daten Schritt für Schritt entsorgt.
Vielleicht solltest du aber ein neues Feld "delFlag" einführen.
Dann kannst du zuerst mit UPDATE das Feld setzen, bevor du durch ein falsches DELETE Kommando deine Daten riskierst:
UPDATE Artikel SET delFlag=1 WHERE IdArtikel <> Trim(IdArtikel) und dann später werden alle Löschkandidaten gelöscht:
DELETE FROM Artikel WHERE delFlag <> 0
Andreas
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

Re: [SQL] where-Clause auf Stringfeld, in dem nur Zahlen ste

  Alt 27. Apr 2006, 19:21
SQL-Code:
select * from Artikel
 where not (
    ArtikelNr like '%A%
    or ArtikelNr like '%B%
    or ArtikelNr like '%C%
...
    or ArtikelNr like '%Z%'
)
sollte doch funktionieren. Soweit ich weiss, ignoriert der LIKE-Operator die Gross/Kleinschreibung. Wenn nicht, müssen eben noch 26 LIKE-Klauseln mit den Kleinbuchstaben herhalten...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von el toppo
el toppo

Registriert seit: 27. Apr 2004
Ort: Aschheim
28 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: [SQL] where-Clause auf Stringfeld, in dem nur Zahlen ste

  Alt 27. Apr 2006, 19:29
Zitat von mkinzler:
Das Problem wird sich nur mit einer SP lösen lassen.
Sowas befürchte ich auch schon.


Zitat von shmia:
Du kannst auch mehrere DELETE Anweisungen nacheinander absetzen.
DELETE FROM Artikel WHERE IdArtikel <> Trim(IdArtikel)
Damit bekomme ich dann alle Artikel, die vor oder nach der Artikelnummer ein Leerzeichen haben. Und dann

Zitat von shmia:
Wenn deine Artikelnummer z.B. immer 10-stellig ist:
DELETe FROM Artikel WHERE IdArtikel > '9999999999OR IdArtikel < '0000000000'
Das funzt aber nicht, weil das Feld ein String-Feld ist, und die Sortierung alphanumerisch ist.

Zitat von shmia:
So werden die ungeliebten Daten Schritt für Schritt entsorgt.
Da habe ich zweifel, ob ich so zum gewünschten Ergebnis komme.

Zitat von shmia:
Vielleicht solltest du aber ein neues Feld "delFlag" einführen.
Dann kannst du zuerst mit UPDATE das Feld setzen, bevor du durch ein falsches DELETE Kommando deine Daten riskierst:
UPDATE Artikel SET delFlag=1 WHERE IdArtikel <> Trim(IdArtikel) und dann später werden alle Löschkandidaten gelöscht:
DELETE FROM Artikel WHERE delFlag <> 0
Gibt es Und nen Haufen DaSi

Zitat von alzaimar:
SQL-Code:
select * from Artikel
 where not (
    ArtikelNr like '%A%
    or ArtikelNr like '%B%
    or ArtikelNr like '%C%
...
    or ArtikelNr like '%Z%'
)
sollte doch funktionieren. Soweit ich weiss, ignoriert der LIKE-Operator die Gross/Kleinschreibung. Wenn nicht, müssen eben noch 26 LIKE-Klauseln mit den Kleinbuchstaben herhalten...
Momentan wird genau so auf ein vom Benutzer einzugebendes Zeichen reagiert, bzw. der Artikel mit dem Zeichen wird gelöscht.
Als ich das so in meinem Script machen wollte, bin ich dann aber an den Sonderzeichen gescheitert, weil alle möglichen Sonderzeichen in der Artikelnummer vorkommen können. Das mit Groß und Klein ist kein Problem die Artikelnummer ist Uppercase.

Danke schonmal

Grüsse vom
el Toppo
  Mit Zitat antworten Zitat
Antwort Antwort


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