Hallo Freunde,
stehe nun vor meiner nächsten Herausvorderung. Möchte gerne aus einer Tabelle nur die Zeilen geliefert bekommen die in einer bestimmten Spalte nur 1 Wort (oder auch 1 lange zahl) beinhalten.
bsp:
Hallo Welt = soll nicht angezeigt werden
Hallo = 1 wort soll angezeigt werden
123123 = 1 "wort/zahl" soll also auch angezeigt werden
123123 c 43 = mehrere soll also nicht angezeigt werden.
Ich habe mir überlegt das es eventuell mit einem Abfrageparameter und
Like %%
irgendwie möglich sein könnte.
Oder vielleicht mit
WHERE MATCH (...'.. '..) ;
Wie würdet ihr vorgehen? Oder sollte man da lieber eine If anweisung einbauen?
Liebe grüße Kloso
Hallo,
beim finden von Leerzeichen (und darum geht es wohl) hilft dir die Funktion instr, beim Prüfen auf reine Zahlen IsNumeric - beides in der Hilfe dokumentiert.
Hallo,
quick and dirty:
Select tbl_Tabelle.*
From tbl_Tabelle
Where InStr([DeinFeld]," ")=0
mal so ne fertige Lösung als Vorschlag:
SELECT DeineTabelle.DeinFeld, InStr([DeinFeld]," ") AS Ausdr1, IIf(IsNumeric([DeinFeld])=0,"Wort","Zahl") AS Ausgabe
FROM DeineTabelle
WHERE InStr([DeinFeld]," ")=0;
Vielen dank euch zwei, funktioniert super.
Liebe Grüße
Habe gehofft ich komme selber darauf wie man den code ändern müsste um zum beispiel von einem auf zwei wörter zu ändern? Aber irgendwie habe ich den code wohl falsch verstanden.
Gruß
habe gedacht
Where InStr([feld], " ")=0;
kann man einfach auf
Where InStr([feld], " ",[feld], " ")=0;
ändern. aber wohl doch nicht so einfach.
Gruß
du brauchst dann nur bei der Where-Klausel ="* * *" zu prüfen, die Ausgabe von Werten mit mehr als einem Leerzeichen macht aber die Prüfung auf Zahl obsolet.
Hallo,
den Inhalt von zwei "Wörtern" mit genau einem trennenden Leerzeichen kannst du, analog zur bisherigen Vorgehensweise, mit folgendem Kriterium feststellen:
Where InStr([DeinFeld]," ") > 0 And InStr(Mid([DeinFeld], InStr([DeinFeld]," ")+1), " ") = 0
Das Suchmuster "* * *" findet alles mögliche das zwei Leerzeichen (oder auch mehr) enthält, da der * ja für alles steht. Macht also nicht wirklich Sinn - nicht nur in diesem Zusammenhang - und mit "=" als Vergleichsoperator schon gar nicht.
Hallo,
noch eine Frage zu diesem Thema, wie könnte ich diesen SQL Code umschreiben, so dass die WHERE Klausel nicht auf gesamtes SELECT sich bezieht sondern nur auf Spalte2.
SELECT Count(Spalte1) AS Total1, Count(Spalte2) AS Total2
FROM Tabelle
WHERE InStr([Spalte2]," ")=0;
Beispiel:
- Spalte1 hat 1000 Einträge, also werden sie gezählt und das Ergebnis=1000 geliefert.
- Spalte2 mit Bezug auf WHERE(ein Wort im feld) hat nur 100 Einträge, also werden sie gezählt und das Ergebnis=100 geliefert
Ergebnis (soll):Stattdessen (mit meinem SQL-Code):Spricht er führt WHERE für die gesamte Query durch, wie kann man es anders schreiben?
SELECT Count(T2.Spalte1) AS Total1,
(SELECT Count(T1.Spalte2) AS Total2
FROM Tabelle AS T1
WHERE InStr(T1.Spalte2," ")=0)
FROM Tabelle AS T2
Oder ?
Hallo, danke hat super funktioniert. Habe nicht rausgefunden gehabt dass man 2 Select auf so eine art und weise verbinden kann.
Danke
Beaker s.a.,
das ist ein wirklich guter Tipp, danke. Ich konnte jetzt problemlos 3 Queries verbinden und sie in einem 4ten Query anzeigen lassen. Super praktisch.
Jedoch sind da 2 weitere Fragen aufgetreten :), Ich versuche mal ohne Code zu beschreiben:
- 1. Ich muss nun beim Ausführen 3x das Datum eintippen, weil es bei 3 Queries abgefragt werden muss. Kann man das automatisieren, dass man nicht 3x mal das selbe eingeben muss? Gibt es dafür einen allgemeinen Ansatz?
- 2. Kann man das eingetippte Datum(Parameter) im Feld anzeigen lassen? z.bsp wenn ich "09.2016" eingebe, dass ich dann in der Spalte Monat: "09.2016" stehen habe
Dankeschön für die Hilfe
PS: Habe die
2. eben wie folgt gelöst:
[] AS Monatalso im Prinzip noch einen Parameter eingebaut der dann die Eingabe einfach anzeigt. Zwar nicht die klugste Lösung aber es funktioniert :D
PS2: Habe die
1. eben auch wie folgt gelöst:
Einfach alle Parameter [gleicher Text], denn wenn der Text gleich ist, dann übernimmt er es für alle. SUPER :)