Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

SQL-Fachmann gesucht

Seppel / 4 Antworten / Baumansicht Nickles

Hallo SQL-Fachleute.

Ich habe ein Problem bei meiner Suche...

Beschreibung des Problems:

In der Tabelle x gibt es die Felder "benutzername" "geburtstag" "geburtsmonat" "geburtjahr"
Der user kann bei seiner Suche ein von_alter und ein bis_alter angeben.

Das Alter muss aber erst aus den oben genannten Feldern errechnet werden, z.B. (in PHP):

30.8.2000
31.1.1982
alter 18

if ($monat_heute > $geburtsmonat) $alter = $jahr_heute - $geburtsjahr;


30.8.2000
30.8.1982
alter 18

if ($monat_heute == $geburtsmonat)
if ($tag_heute == $geburtstag) $alter = $jahr_heute - $geburtsjahr;

usw.

Die Befehle gehen aber nur, wenn ich schon die Werte aus der Tabelle ausgelesen habe (select * from x)

Meine Frage: wie krieg ich "benutzername", die zwischen von_alter und bis_alter sind?

Vielen Dank für alles Sinnvolle

Seppel

bei Antwort benachrichtigen
neanderix Seppel „SQL-Fachmann gesucht“
Optionen

Da man in SQL auch Rechnen kann, geht das ganze wie Folgt - allerdings muss dein SQL-Dialekt dazu
auch einen Befehl haben, mit dem man das aktuelle Datum ermitteln kann; deshalb hier die ACCESS-Variante:

SELECT benutzername FROM X WHERE (Year(Date() ) - geburtsjahr) Between von_alter AND bis_alter;

Gruss, Volker

Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen
Seppel neanderix „Da man in SQL auch Rechnen kann, geht das ganze wie Folgt - allerdings muss dein...“
Optionen

Hallo und danke erstmal. das ist ja schonmal nicht schlecht, aber es gibt ja folgendes: heute ist der 10.08.2000 und der spund hat am 10.10.1900 geburtstag: dann ist er 100 aber eigentlich erst 99, d.h. ich muss den monat und den tag mit einbringen...
ist (Year(date()) ne sql-funktion???

danke, gruß seppel

bei Antwort benachrichtigen
neanderix Seppel „Hallo und danke erstmal. das ist ja schonmal nicht schlecht, aber es gibt ja...“
Optionen

Nein, die funktionen "Year()" und "Date()" sind Funktionen aus ACCESS-VBA.
"Date()" liefert dir das aktuelle Systemdatum, "Year()" liefert dir aus einem gegebenen Zeit-Wert - das kann auch ein sogen, DateSerial -wert sein -
das jahr. Demnach liefert "Year(Date())" den "Jahr" Teil des aktuellen Systemdatums.
Du kannst natuerlich auch Datum - Datum rechnen.
Allerdings muesste ich da mal etwas genauer nachsehen.

Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen
(Anonym) Seppel „SQL-Fachmann gesucht“
Optionen

Warum bestimmst Du nicht schreibst Du das Alter nach dem Du suchen willst nicht schon vorher durch setzen von von_tag, von_monat, von_jahr und bis_tag, ... fest und machst dann ein
"select benutzername from X
where
  (geburtsjahr > von_jahr and geburtsjahr   ((geburtsjahr = von_jahr and
    (geburtsmonat > von_monat or
    (geburtsmonat = von_monat and geburtstag > von_tag)) or
  ((geburtsjahr = bis_jahr and
    (geburtsmonat     (geburtsmonat = bis_monat and geburtstag Müsste doch eigentlich gehen, oder? Das mit dem Between wird nicht so ohne weiteres gehen, da Du den Vergleich nur richtig mit dem date Datentypen machsen kannst.
Du könntest auch eine zusätzliche Spalte in die Tabelle einfügen, in der das Geburtsdatum komplett steht, d.h. z.B. "01.01.1900" und dann bräuchtest Du nur ein
"select benutzername from X
where geburtsdatum between '01.01.1900' and '01.01.1970'"

bei Antwort benachrichtigen