Discussion:
Nur Zahlen filtern
(zu alt für eine Antwort)
Ralph Mattli
2009-05-18 14:30:09 UTC
Permalink
Hallo zusammen
Für das nun folgende Problem, habe ich leider in keiner Litaratur oder hier
im Forum eine Antwort erhalten. Dneke jedoch für Euch ist es eine Kleinigkeit.

Also ich habe eine Exceltabelle verknüpft, welche in der Spalte A, Zahlen
sowie Texte beinhaltet. Nun benötige ich für die weitere Verarbeitung die
Zahlen in der Spalte.

Nun suche ich nach den richtigen Kriterium, welches mir in einer Abfrage nur
die Zahlenwerte aus der Spalte A anzeigt.

Kann mir bitte jemand den richtigen Weg weisen?
Dnake und Gruss
Ralph
Peter Doering
2009-05-18 14:48:55 UTC
Permalink
Hallo,
Post by Ralph Mattli
Für das nun folgende Problem, habe ich leider in keiner Litaratur oder hier
im Forum eine Antwort erhalten. Dneke jedoch für Euch ist es eine Kleinigkeit.
Also ich habe eine Exceltabelle verknüpft, welche in der Spalte A, Zahlen
sowie Texte beinhaltet. Nun benötige ich für die weitere Verarbeitung die
Zahlen in der Spalte.
Nun suche ich nach den richtigen Kriterium, welches mir in einer Abfrage nur
die Zahlenwerte aus der Spalte A anzeigt.
SELECT * FROM ExcelTab WHERE SpalteA Like "[0-9]"

Wenn es gemischte Felder gibt, du aber nur die willst, die nur Zahlen
enthalten, musst du den Rest ausschliessen:

WHERE SpalteA Not Like "^[0-9]"

Gruss - Peter
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
Thomas Möller
2009-05-18 16:37:06 UTC
Permalink
Hallo Peter,
Post by Peter Doering
Post by Ralph Mattli
Für das nun folgende Problem, habe ich leider in keiner Litaratur oder hier
im Forum eine Antwort erhalten. Dneke jedoch für Euch ist es eine Kleinigkeit.
Also ich habe eine Exceltabelle verknüpft, welche in der Spalte A, Zahlen
sowie Texte beinhaltet. Nun benötige ich für die weitere Verarbeitung die
Zahlen in der Spalte.
Nun suche ich nach den richtigen Kriterium, welches mir in einer Abfrage nur
die Zahlenwerte aus der Spalte A anzeigt.
SELECT * FROM ExcelTab WHERE SpalteA Like "[0-9]"
dieses Kriterium bringt mir als Ergebnis nur Zahlen mit einer Ziffer.

Durch das anhängen eines Sternchens würde man alle DS erhalten, die mit
einer Ziffer beginnen.

WHERE SpalteA Like "[0-9]*"
Post by Peter Doering
Wenn es gemischte Felder gibt, du aber nur die willst, die nur Zahlen
WHERE SpalteA Not Like "^[0-9]"
(Das "^"-Zeichen ist wahrscheinlich beim kopieren reingeraten.)

Dieses Kriterium bringt mir alle DS, die nicht nur eine Ziffer als
Feldinhalt haben.

Durch das anhängen eines Sternchen würde man alle DS, die nicht mit
einer Ziffer beginnen erhalten.

Ich bin gerade auf der Suche nach einem Kriterium mit der Like-Klausel
um die Aufgabenstellung zu lösen. Es will mir aber nicht wirklich
gelingen. Das Folgende Kriterium:

WHERE Feld1 Like "[0-9]"
Or Feld1 Like "[0-9][0-9]"
Or Feld1 Like "[0-9][0-9][0-9]"
Or Feld1 Like "[0-9][0-9][0-9][0-9]"

liefert alle DS mit 1- bis 4-stelligen Zahlen.

Vielleicht hat ja noch jemand eine Idee.


CU
--
Thomas

Homepage: www.Team-Moeller.de
Peter Doering
2009-05-18 17:51:20 UTC
Permalink
Hallo Thomas,
Post by Thomas Möller
Post by Peter Doering
Post by Ralph Mattli
Für das nun folgende Problem, habe ich leider in keiner Litaratur oder hier
im Forum eine Antwort erhalten. Dneke jedoch für Euch ist es eine Kleinigkeit.
Also ich habe eine Exceltabelle verknüpft, welche in der Spalte A, Zahlen
sowie Texte beinhaltet. Nun benötige ich für die weitere Verarbeitung die
Zahlen in der Spalte.
Nun suche ich nach den richtigen Kriterium, welches mir in einer Abfrage nur
die Zahlenwerte aus der Spalte A anzeigt.
SELECT * FROM ExcelTab WHERE SpalteA Like "[0-9]"
dieses Kriterium bringt mir als Ergebnis nur Zahlen mit einer Ziffer.
Ja, ich haette vielleicht noch das Kuerzel (Luftcode) dahinterstellen
sollen ;-)
Post by Thomas Möller
Post by Peter Doering
Wenn es gemischte Felder gibt, du aber nur die willst, die nur Zahlen
WHERE SpalteA Not Like "^[0-9]"
(Das "^"-Zeichen ist wahrscheinlich beim kopieren reingeraten.)
Warum? Das steht fuer ungleich und sollte alle bringen, die keine Zahl
enthalten. Allerdings hat die Luft ;-) einiges verwirbelt. S.u.
Post by Thomas Möller
Dieses Kriterium bringt mir alle DS, die nicht nur eine Ziffer als
Feldinhalt haben.
Durch das anhängen eines Sternchen würde man alle DS, die nicht mit
einer Ziffer beginnen erhalten.
Ich bin gerade auf der Suche nach einem Kriterium mit der Like-Klausel
um die Aufgabenstellung zu lösen. Es will mir aber nicht wirklich
WHERE Feld1 Like "*[^0-9]*" AND Feld1 Not Like "*[A-Z]*"

bringt alle, die nur Zahlen enthalten, egal wieviele Stellen, wobei [A-Z]
natuerlich nicht ausreicht, wenn auch Sonderzeichen vorkommen.

Gruss - Peter
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
Peter Doering
2009-05-18 18:15:09 UTC
Permalink
Post by Peter Doering
Post by Thomas Möller
Post by Peter Doering
WHERE SpalteA Not Like "^[0-9]"
(Das "^"-Zeichen ist wahrscheinlich beim kopieren reingeraten.)
Warum? Das steht fuer ungleich und sollte alle bringen, die keine Zahl
enthalten.
Aber nicht in Jet-SQL ;-)

Gruss - Ingrid
Thomas Möller
2009-05-18 18:45:21 UTC
Permalink
Hallo Peter,
Post by Peter Doering
Post by Thomas Möller
Post by Peter Doering
Wenn es gemischte Felder gibt, du aber nur die willst, die nur Zahlen
WHERE SpalteA Not Like "^[0-9]"
(Das "^"-Zeichen ist wahrscheinlich beim kopieren reingeraten.)
Warum? Das steht fuer ungleich und sollte alle bringen, die keine Zahl
enthalten. Allerdings hat die Luft ;-) einiges verwirbelt. S.u.
Danke für den Hinweis. Ich hatte bisher immer das Ausrufezeichen als
"Verneinungsoperator" im Kopf.
Post by Peter Doering
Post by Thomas Möller
Ich bin gerade auf der Suche nach einem Kriterium mit der Like-Klausel
um die Aufgabenstellung zu lösen. Es will mir aber nicht wirklich
WHERE Feld1 Like "*[^0-9]*" AND Feld1 Not Like "*[A-Z]*"
bringt alle, die nur Zahlen enthalten, egal wieviele Stellen, wobei [A-Z]
natuerlich nicht ausreicht, wenn auch Sonderzeichen vorkommen.
Bei diesem Kriterium kannst Du den ersten Teil sogar noch weglassen:

WHERE Feld1 Not Like "*[A-Z]*"


Und mit Josefs Tipp klappt es auch mit den Sonderzeichen.

CU
--
Thomas

Homepage: www.Team-Moeller.de
Henry Habermacher
2009-05-19 04:48:47 UTC
Permalink
Hallo Peter
Post by Peter Doering
WHERE Feld1 Like "*[^0-9]*" AND Feld1 Not Like "*[A-Z]*"
bringt alle, die nur Zahlen enthalten, egal wieviele Stellen, wobei [A-Z]
natuerlich nicht ausreicht, wenn auch Sonderzeichen vorkommen.
Tönt einfach, aber:
1E-3
12.12 CHF
1'234.00

Das mit den Sonderzeichen dürfte arg schwierig werden, weil z.B. eben ein E
an der richtigen position nicht als Sonderzeichen gewertet werden darf,
ebenso - + ' , . und allenfalls Währungszeichen

Ich würde daher einfachheitshalber einfach vorschlagen, die dafür
vorgesehene Funktion zu verwenden:

WHERE isNumeric(Feld1)

Da werden sogar die Ländereinstellungen berücksichtigt. So ist bei mir mit
Schweizer Einstellungen:
? isnumeric("123'456")
True

? isnumeric("123,123")
False

? isnumeric("123.123")
True

? isnumeric("123 CHF")
True

? isnumeric("123 €")
False

? isnumeric("1E-3")
True

Ob Du das alles in eine LIKE Bedingung reinbekommst, wage ich zu bezweifeln,
vorallem wegen der Länderabhängigkeit.

Gruss
Henry
--
Los geht's: SEK3 Anmeldung bei www.donkarl.com/?sek
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Josef Poetzl
2009-05-18 17:52:19 UTC
Permalink
Hallo!
[...]
Post by Thomas Möller
Post by Peter Doering
Wenn es gemischte Felder gibt, du aber nur die willst, die nur Zahlen
WHERE SpalteA Not Like "^[0-9]"
(Das "^"-Zeichen ist wahrscheinlich beim kopieren reingeraten.)
Dieses Kriterium bringt mir alle DS, die nicht nur eine Ziffer als
Feldinhalt haben.
Durch das anhängen eines Sternchen würde man alle DS, die nicht mit
einer Ziffer beginnen erhalten.
Ich bin gerade auf der Suche nach einem Kriterium mit der Like-Klausel
um die Aufgabenstellung zu lösen. Es will mir aber nicht wirklich
WHERE Feld1 Like "[0-9]"
Or Feld1 Like "[0-9][0-9]"
Or Feld1 Like "[0-9][0-9][0-9]"
Or Feld1 Like "[0-9][0-9][0-9][0-9]"
liefert alle DS mit 1- bis 4-stelligen Zahlen.
Vielleicht hat ja noch jemand eine Idee.
http://groups.google.com/group/microsoft.public.de.access/msg/7d89b802aa96272b
Da gab Thomas Möller einen gut Tipp. :-)

Etwas umgeformt:
.. Feld not Like "*[!0-9]*"


mfg
Josef
Thomas Möller
2009-05-18 18:50:08 UTC
Permalink
Hallo Josef,
Post by Josef Poetzl
Post by Thomas Möller
Ich bin gerade auf der Suche nach einem Kriterium mit der Like-Klausel
um die Aufgabenstellung zu lösen. Es will mir aber nicht wirklich
WHERE Feld1 Like "[0-9]"
Or Feld1 Like "[0-9][0-9]"
Or Feld1 Like "[0-9][0-9][0-9]"
Or Feld1 Like "[0-9][0-9][0-9][0-9]"
liefert alle DS mit 1- bis 4-stelligen Zahlen.
Vielleicht hat ja noch jemand eine Idee.
http://groups.google.com/group/microsoft.public.de.access/msg/7d89b802aa96272b
Da gab Thomas Möller einen gut Tipp. :-)
danke das Du mich erinnerst. ;-)
Post by Josef Poetzl
... Feld not Like "*[!0-9]*"
Ich finde das ist ein schönes Beispiel wo eine doppelte Verneinung einen
Sinn ergibt. ;-)

CU
--
Thomas

Homepage: www.Team-Moeller.de
Josef Poetzl
2009-05-18 19:03:10 UTC
Permalink
Hallo!
Post by Thomas Möller
Post by Josef Poetzl
Post by Thomas Möller
Ich bin gerade auf der Suche nach einem Kriterium mit der Like-Klausel
um die Aufgabenstellung zu lösen. Es will mir aber nicht wirklich
WHERE Feld1 Like "[0-9]"
Or Feld1 Like "[0-9][0-9]"
Or Feld1 Like "[0-9][0-9][0-9]"
Or Feld1 Like "[0-9][0-9][0-9][0-9]"
liefert alle DS mit 1- bis 4-stelligen Zahlen.
Vielleicht hat ja noch jemand eine Idee.
http://groups.google.com/group/microsoft.public.de.access/msg/7d89b802aa96272b
Da gab Thomas Möller einen gut Tipp. :-)
danke das Du mich erinnerst. ;-)
Das war so ein "Mit der Hand auf die Stirn schlagen"-Fall, als du den
Vorschlag brachtest, da ich in diesem Thread viel zu kompliziert
dachte.
... so etwas merkt man sich dann. ;-)


mfg
Josef
Thomas Möller
2009-05-19 05:14:41 UTC
Permalink
Hallo Josef,
Post by Josef Poetzl
Das war so ein "Mit der Hand auf die Stirn schlagen"-Fall, als du den
Vorschlag brachtest, da ich in diesem Thread viel zu kompliziert
dachte.
.... so etwas merkt man sich dann. ;-)
diesmal war ich es, der sich auf dem Holzweg befand. Und ja - auch meine
Hand hat sich schwungvoll in Richtung Kopf bewegt. ;-)
Mal sehen, wie lange ich es mir merken kann.

CU
--
Thomas

Homepage: www.Team-Moeller.de
Henry Habermacher
2009-05-19 04:50:08 UTC
Permalink
Hallo Thomas
Post by Thomas Möller
WHERE Feld1 Like "[0-9]"
Or Feld1 Like "[0-9][0-9]"
Or Feld1 Like "[0-9][0-9][0-9]"
Or Feld1 Like "[0-9][0-9][0-9][0-9]"
liefert alle DS mit 1- bis 4-stelligen Zahlen.
Vielleicht hat ja noch jemand eine Idee.
isNumeric() vielleicht?

Gruss
Henry
--
Los geht's: SEK3 Anmeldung bei www.donkarl.com/?sek
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Thomas Möller
2009-05-19 05:12:37 UTC
Permalink
Hallo Henry,
Post by Henry Habermacher
Post by Thomas Möller
WHERE Feld1 Like "[0-9]"
Or Feld1 Like "[0-9][0-9]"
Or Feld1 Like "[0-9][0-9][0-9]"
Or Feld1 Like "[0-9][0-9][0-9][0-9]"
liefert alle DS mit 1- bis 4-stelligen Zahlen.
Vielleicht hat ja noch jemand eine Idee.
isNumeric() vielleicht?
Du hast einen entscheidenden Satz beim Zitat meines Beitrags vergessen:
"Ich bin gerade auf der Suche nach einem Kriterium mit der Like-Klausel
um die Aufgabenstellung zu lösen."

Die Funktion IsNumeric ist mir durchaus bekannt. Ich war aber
ausdrücklich an einer Lösung nur mit der Like-Klausel interessiert.


CU
--
Thomas

Homepage: www.Team-Moeller.de
Ralph Mattli
2009-05-19 05:29:01 UTC
Permalink
Guten Morgen zusammen
Ganz herzlichen Dank an alle, die mich mit guten Ideen versorgt haben. Ich
werde die gesamten Versionen ausprobieren und testen welche für mich am
geeignetsten ist.
Gruss aus der Scheiz.
Ralph
Post by Peter Doering
Hallo Thomas
Post by Thomas Möller
WHERE Feld1 Like "[0-9]"
Or Feld1 Like "[0-9][0-9]"
Or Feld1 Like "[0-9][0-9][0-9]"
Or Feld1 Like "[0-9][0-9][0-9][0-9]"
liefert alle DS mit 1- bis 4-stelligen Zahlen.
Vielleicht hat ja noch jemand eine Idee.
isNumeric() vielleicht?
Gruss
Henry
--
Los geht's: SEK3 Anmeldung bei www.donkarl.com/?sek
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Ralph Mattli
2009-05-18 14:52:01 UTC
Permalink
Hallo zusammen
Habe wohl zuwenig lange gesucht. Hier die natwort, damit in diesem Forum
auch mal was darüber steht:

Der Code muss in die Zeile Feld der Spalte eintragen werden. Nicht als
Kriterium!

Hersteller_ID: IstNumerisch([ArtNr])

Als Kriterium Wahr bzw. True eintragen.

Gruss Ralph
Post by Ralph Mattli
Hallo zusammen
Für das nun folgende Problem, habe ich leider in keiner Litaratur oder hier
im Forum eine Antwort erhalten. Dneke jedoch für Euch ist es eine Kleinigkeit.
Also ich habe eine Exceltabelle verknüpft, welche in der Spalte A, Zahlen
sowie Texte beinhaltet. Nun benötige ich für die weitere Verarbeitung die
Zahlen in der Spalte.
Nun suche ich nach den richtigen Kriterium, welches mir in einer Abfrage nur
die Zahlenwerte aus der Spalte A anzeigt.
Kann mir bitte jemand den richtigen Weg weisen?
Dnake und Gruss
Ralph
Peter Doering
2009-05-18 15:16:13 UTC
Permalink
Hallo,
Post by Ralph Mattli
Post by Ralph Mattli
Für das nun folgende Problem, habe ich leider in keiner Litaratur oder hier
im Forum eine Antwort erhalten. Dneke jedoch für Euch ist es eine Kleinigkeit.
Also ich habe eine Exceltabelle verknüpft, welche in der Spalte A, Zahlen
sowie Texte beinhaltet. Nun benötige ich für die weitere Verarbeitung die
Zahlen in der Spalte.
Nun suche ich nach den richtigen Kriterium, welches mir in einer Abfrage nur
die Zahlenwerte aus der Spalte A anzeigt.
Habe wohl zuwenig lange gesucht. Hier die natwort, damit in diesem Forum
Der Code muss in die Zeile Feld der Spalte eintragen werden. Nicht als
Kriterium!
Hersteller_ID: IstNumerisch([ArtNr])
Als Kriterium Wahr bzw. True eintragen.
Beachte aber, dass IsNumeric auch Werte wie

1.5
1,5
-1
1E-10

usw. als gueltig erkennt, A1, 1A oder Null dagegen nicht. Wenn das deinen
Anforderungen entspricht, ok.

Gruss - Peter
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
Henry Habermacher
2009-05-19 04:54:21 UTC
Permalink
Post by Peter Doering
Post by Ralph Mattli
Hersteller_ID: IstNumerisch([ArtNr])
Als Kriterium Wahr bzw. True eintragen.
Da hatte ich wohl wieder mal ein kleineres Synchronisationsproblem
Post by Peter Doering
Beachte aber, dass IsNumeric auch Werte wie
1.5
1,5
-1
1E-10
usw. als gueltig erkennt, A1, 1A oder Null dagegen nicht. Wenn das deinen
Anforderungen entspricht, ok.
1,5 ist doch keine Zahl, wie kommst Du darauf. Bei mir gibt
? isnumeric("1,5")
False

Dafür erhalte ich bei:
? isnumeric("1'500 CHF")
True

Warum wohl? C, H und F sind doch Buchstaben, ebenso das Leerzeichen und das
'.

Da er die Zahlen aus Excel einlesen will, glaube ich, sollte es schon
stimmen, wenn die länderspezifischen Einstellungen berücksichtigt werden,
ebenso wie wissenschaftliche Notationen, denen Excel gerne mal fröhnt.

Gruss
Henry
--
Los geht's: SEK3 Anmeldung bei www.donkarl.com/?sek
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Peter Doering
2009-05-19 07:33:03 UTC
Permalink
Hallo Henry,
Post by Henry Habermacher
Post by Peter Doering
Post by Ralph Mattli
Hersteller_ID: IstNumerisch([ArtNr])
Als Kriterium Wahr bzw. True eintragen.
Da hatte ich wohl wieder mal ein kleineres Synchronisationsproblem
Post by Peter Doering
Beachte aber, dass IsNumeric auch Werte wie
1.5
1,5
-1
1E-10
usw. als gueltig erkennt, A1, 1A oder Null dagegen nicht. Wenn das deinen
Anforderungen entspricht, ok.
1,5 ist doch keine Zahl, wie kommst Du darauf. Bei mir gibt
? isnumeric("1,5")
False
Bei mir ergeben 1.5 *und* 1,5 True.

Meine Regionaleinstellungen:

Dezimalzeichen: .
'000-Zeichen: ,

Du hast bei letzterem wahrscheinlich das ', oder?
Post by Henry Habermacher
? isnumeric("1'500 CHF")
True
Warum wohl? C, H und F sind doch Buchstaben, ebenso das Leerzeichen und das
'.
Da er die Zahlen aus Excel einlesen will, glaube ich, sollte es schon
stimmen, wenn die länderspezifischen Einstellungen berücksichtigt werden,
ebenso wie wissenschaftliche Notationen, denen Excel gerne mal fröhnt.
Das glaube ich nicht, also weder, dass er das so wollte, noch, dass diese
Zeichen vorkommen, wenn man aufgrund des Feldnamens Rueckschluesse zieht:

| Hersteller_ID: IstNumerisch([ArtNr])

;-)

Gruss - Peter
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
Henry Habermacher
2009-05-19 11:48:51 UTC
Permalink
Hallo Peter
Post by Peter Doering
Bei mir ergeben 1.5 *und* 1,5 True.
Dezimalzeichen: .
'000-Zeichen: ,
Du hast bei letzterem wahrscheinlich das ', oder?
schon klar, war ironisch gemeint.
Post by Peter Doering
Post by Henry Habermacher
? isnumeric("1'500 CHF")
True
Warum wohl? C, H und F sind doch Buchstaben, ebenso das Leerzeichen und
das '.
..
Post by Peter Doering
Das glaube ich nicht, also weder, dass er das so wollte, noch, dass diese
Ja, sein OP war nicht ganz klar. Auch Klaus' Antwort hätte die richtige sein
oder funktionieren können, also einfach die Zahlen aus einem String
"rausfiltern".

Gruss
Henry
--
Los geht's: SEK3 Anmeldung bei www.donkarl.com/?sek
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Klaus Oberdalhoff
2009-05-18 17:19:10 UTC
Permalink
Hi,
Post by Peter Doering
nur Zahlen
meine Uralt Funktion aus der KnwoHow:

Function NurZahl(Eingabe As String)
' ***********************************************************
' Entfernt alle nicht numerischen Werte und gibt die puren Ziffern zurück
' Ausschließlich gedacht, um z.B. aus Telefonnummern "/" oder "-" oder "("
")"
' zu entfernen.
' Achtung: Es entfernt auch Komma oder Tausenderpunkt etc ohne Rücksicht.
' Die Funktion ist also für Zahlen mit Nachkommastellen ungeeignet !!!
' ***********************************************************

Dim I As Integer, Max As Integer, tmp As String

NurZahl = ""

Max = Len(Trim(Nz(Eingabe)))

If Max = 0 Then
Exit Function
End If

For I = 1 To Max
tmp = Mid(Eingabe, I, 1)
If Not (tmp < Chr(48) Or tmp > Chr(57)) Then
NurZahl = NurZahl & tmp
End If
Next I

End Function


mfg

Klaus
Lesen Sie weiter auf narkive:
Loading...