SQL-Abfrage - Problem bei der Realisierung

Lautsprecher

Erfahrenes Mitglied
Hallo allerseits,

ich muss eine Tabelle von falschen Datensätzen reinigen nur leider weiß ich nicht recht wie dafür die SQL-Abfrage aussieht:
Die Tabelle sieht ungefähr so aus:


Code:
Lfd Nr         Artikelbez.              Menge    
1                  123456A                    10
2                  Gabel                 
3                  12345B                        5
4                   Messer                       
5                   123456C                       2
6                   Fenster
etc.


In der Tabelle müssen alle Bezeichnungen (Gabel, Messer, Fenster, etc.) gelöscht werden.
Ich dachte da irgendwie an eine Abfrage wie: where Artikelbez. is numeric......
die ersten 5 Stellen bei der Artikelnr. sind immer Zahlen


Hasta luego
 
Mit 'nem regulären Ausdruck ginge das zum Beispiel:

SQL:
DELETE FROM tabelle
WHERE artbez REGEXP '^[:digit:]{5,}.*'

(Falls da 'n Syntaxfehler rauskommen sollte: ich habe auch nur mal eben in der Doku nachgeschaut. =) )
 
Moin ishino und Lautsprecher,

auf die REXEXP-Variante wäre ich nun nie spontan gekommen..*gg
...aber sieht ja durchaus reizvoll aus.

Ich hätte irgendetwas versucht in der Art
Code:
DELETE FROM TABELLE
Where CONVERT(Left(ArtBez,5), UNSIGNED) = 0;
--oder---
DELETE FROM TABELLE
Where CAST(Left(ArtBez,5) AS UNSIGNED) = 0;

Die RegExp-Variante gefällt mir gut - ich weiss nur nicht, ob mir nach 3 Monaten noch sofort einfallen würde, was ich damit gemeint habe ;-)

Grüsse
Biber2
 
Hallo Ihr beiden,
danke Euch für die Tipps, werde beide mal ausprobieren. Die REGEXP habe ich noch nie gesehen... vor allem was bedeutet oder was macht er genau bei

'^[:digit:]{5,}.*'

Grüße
 
So als RegExp Unerfahrener User würde ich alle die Löschen, wo Menge = NULL ist ? Wenn das wirklich imemr so vorkommt ;)
 
Hallo Ihr beiden,
danke Euch für die Tipps, werde beide mal ausprobieren. Die REGEXP habe ich noch nie gesehen... vor allem was bedeutet oder was macht er genau bei

'^[:digit:]{5,}.*'

Grüße

^ steht für den Anfang einer Zeichenkette

[:digit:] ist eine Klasse von Zeichen - in dem Fall alle Ziffern (0-9),

{5,} heißt von dem/der Zeichen/-klasse vor dem Ausdruck müssen mindestens 5 oder mehr in der zu testenden Zeichenkette vorkommen und

.* der Punkt steht für ein beliebiges Zeichen, * heißt es darf beliebig oft (auch gar nicht) vorkommen

Zusammen gelesen heißt das also: finde alle Zeichenketten, die mit 5 oder mehr Ziffern beginnen und danach kein oder mehrere beliebige Zeichen auftreten.

Zutreffen tut das beispielsweise auf:

012345893
35902
24805azt

nicht dagegen bei:

a98314
934a21
23843 (Leerzeichen am Beginn)

HTH
 
^ steht für den Anfang einer Zeichenkette

[:digit:] ist eine Klasse von Zeichen - in dem Fall alle Ziffern (0-9),

{5,} heißt von dem/der Zeichen/-klasse vor dem Ausdruck müssen mindestens 5 oder mehr in der zu testenden Zeichenkette vorkommen und

.* der Punkt steht für ein beliebiges Zeichen, * heißt es darf beliebig oft (auch gar nicht) vorkommen

Zusammen gelesen heißt das also: finde alle Zeichenketten, die mit 5 oder mehr Ziffern beginnen und danach kein oder mehrere beliebige Zeichen auftreten.

Zutreffen tut das beispielsweise auf:

012345893
35902
24805azt

nicht dagegen bei:

a98314
934a21
23843 (Leerzeichen am Beginn)

HTH



Merci,
für deine Erklärung, hat mir sehr weiter geholfen

hasta luego
 
Zurück