Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage die Zeilen liefert die in einer bestimmten Spalte nur 1 Wort beinhalten.

Begonnen von Kloso, Oktober 20, 2016, 12:45:36

⏪ vorheriges - nächstes ⏩

Kloso

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
Viele Grüße Kloso

el_gomero

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.
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

DF6GL

Hallo,

quick  and dirty:

Select tbl_Tabelle.*
From tbl_Tabelle
Where InStr([DeinFeld]," ")=0

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

el_gomero

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;
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

Kloso

Viele Grüße Kloso

Kloso

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ß
Viele Grüße Kloso

Kloso

habe gedacht
Where InStr([feld], " ")=0;
kann man einfach auf
Where InStr([feld], " ",[feld], " ")=0;
ändern. aber wohl doch nicht so einfach.
Gruß
Viele Grüße Kloso

el_gomero

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.
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

MaggieMay

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.
Freundliche Grüße
MaggieMay

Kloso

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):


Total1Total2
1000100

Stattdessen (mit meinem SQL-Code):


Total1Total2
100100

Spricht er führt WHERE für die gesamte Query durch, wie kann man es anders schreiben?
Viele Grüße Kloso

Beaker s.a.


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 ?
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Kloso

Hallo, danke hat super funktioniert. Habe nicht rausgefunden gehabt dass man 2 Select auf so eine art und weise verbinden kann.
Danke
Viele Grüße Kloso

Kloso

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 Monat
also 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 :)
Viele Grüße Kloso