Datum eingrenzen Abfragen. [ERLEDIGT]
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 70 Mal
Datum eingrenzen Abfragen. [ERLEDIGT]
Ich habe die Aufgabe aus einer Tabelle die nächsten 5 personen zu ermitteln, die ab dem aktuellen Tag Geburtstag haben. Wie geht man an sowas dran? Nach Datum kann ich ja nicht sortieren, da die jahreszahl ja auch eine Rolle spielt und somit immer die ganz alten am Anfang drin stehen und die ganz jungen eher nicht. Oder sollte sowas über einen 2. Weg gelöst werden, das also erstmal alle ermittelt werden, die vom Tag und Monat her infrage kommen und dann später im Programm nochmal filtern?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Marcus Herz
- 1000 working lines a day
- Beiträge: 862
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 40 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: Datum eingrenzen Abfragen.
in etws so: (für ADS)
Code: Alles auswählen
select top 5 tabelle.*
(day(geburtstag) + month(geburtstag)*100 +
iif( month(geburtstag) = 12, 0, 10000)) as sort /* zum verständnis */
from tabelle
where iif( month(geburtstag) = month(curdate()), day(geburtstag) >= day(curdate()) and month(geburtstag) = month(curdate()) , /* alle diesen Monat ab heute */
month(geburtstag) <> month(curdate())) /* alle anderen monate */
order by
day(geburtstag) + month(geburtstag)*100 + /* pseudo sortierung */
iif( month(geburtstag) = 12, 0, 10000) /* sprung ins nächste jahr */
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 70 Mal
Re: Datum eingrenzen Abfragen.
das ergibt aber jetzt das hier.
ich kann aber leider nicht erkennen, was jetzt wo am Script noch angepaßt werden muß. Denn eigentlich dürften keine Geburtstage aus der Vergangenheit auftauchen.Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Marcus Herz
- 1000 working lines a day
- Beiträge: 862
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 40 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: Datum eingrenzen Abfragen.
Code: Alles auswählen
select top 5 tabelle.*
(day(geburtstag) + month(geburtstag)*100 +
iif( month(geburtstag) = 12, 0, 10000)) as sort /* zum verständnis */
from tabelle
where iif( month(geburtstag) = month(curdate()), day(geburtstag) >= day(curdate()) and month(geburtstag) = month(curdate()) , /* alle diesen Monat ab heute */
month(geburtstag) <> month(curdate())) /* alle anderen monate */
order by
day(geburtstag) + month(geburtstag)*100 + /* pseudo sortierung */
iif( month(geburtstag) = 12 and month(curdate()) = 12, 0, 10000) /* sprung ins nächste jahr */
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- nightcrawler
- 1000 working lines a day
- Beiträge: 655
- Registriert: Di, 24. Apr 2012 16:33
- Wohnort: 72184 Weitingen
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 96 Mal
- Kontaktdaten:
Re: Datum eingrenzen Abfragen.
um ganz sicher zu gehen, brauchst Du zunächst eine Liste mit allen kommenden Tagen:
diese Liste wird mit den Geburtstagen verbunden (nur tag und monat):
Damit bekommst Du alle Geburtstage der nächsten 365 Tage....gerne auch der nächsten 2....x Jahre. Mit TOP X schränkst du die Rückgbe ein (falls nur zwei Mitarbeiter da sind, gibt es trotzdem die nächsten 5 Geburtstage....halt mit Abstand).
Code: Alles auswählen
create PROCEDURE AlleTageZwischenDatum
(
starttermin date,
endtermin date,
tag DATE OUTPUT
)
BEGIN
//Timestamp ist in ADS einfacher als Date
DECLARE @ts TIMESTAMP;
DECLARE @te TIMESTAMP;
@ts = CAST(_starttermin as SQL_TIMESTAMP);
@te = CAST(_endtermin as SQL_TIMESTAMP);
WHILE @ts <= @te DO
INSERT INTO __output(tag) VALUES(cast(@ts as SQL_DATE));
@ts=TIMESTAMPADD( SQL_TSI_DAY, 1, @ts);
END;
END;
Code: Alles auswählen
select d.tag, p.name, p.dob, year(d.tag)-year(dob) as "alter"
from person p
JOIN (execute procedure AlleTageZwischenDatum(date(), date()+365)) d on
day(dob)=day(d.tag) and month(dob)=month(d.tag)
order by d.tag