-
Query Serienbrief sobald eine Person 32 Jahre wird
Hallo Zusammen
Ich bin gerade daran ein Query zu erstellen und stehe vor einem Problem.
Zuerst aber noch zu der Ausganglage:
Sobald eine Person 32 Jahr wird, möchten wir einen bestimmten Brief versenden (machen wir mit einem Serienbrief). Der Serienbrief wird jeweils im Vormonat verschickt. Der Text würde folgendermassen lautet: " am 22.11.2020 werden Sie 32 Jahre alt".
Wie kann ich mit einem Query ausrechnen, wann eine Person 32 Jahr alt wird? Geburtstag, Adresse, Korrespondenzsprache, usw. sind alle vorhanden.
Gruss
mademi
-
Pie mal Daumen:
(days(current days) - days(birthdate)) / 365.25
-
Hi Mademi,
values (date('1991-01-01') + 32 years)
liefert dir: 2023-01-01
Also am 2023-01-01 wird diese Person 32 Jahre alt.
lg Andreas
-
Danke für die Antworten, jedoch erhalten ich einen Wert in der neuen Ergebnis, mit dem ich nicht viel anfangen kann (+++++++)
Zeile ....+....1....+....2.
Geb.Datum GEB
000001 730608 03.05.26
000002 880226 ++++++++
000003 551208 ++++++++
000004 530908 ++++++++
000005 650608 ++++++++
Das Ergebnisfeld habe ich so formatiert:
Feld Ausdruck Spaltenüberschrift Länge Dez
GEB date(ADBDDT) + 25 years
Gruss
Mademi
-
So wie es aussieht handelt es sich bei Deinem Datum um ein numerisches Datum im Format 2-st. Jahr, 2-st. Monat, 2-st. Tag.
Du musst zunächst das numerische Datum in ein echtes Datum verwandeln.
Sofern Du mit SQL arbeitest, kannst Du das numerische Datum wie folgt in eine echte Zeitmarke konvertieren:
Code:
Timestamp_Format(Digits(NumDat), 'YYMMDD')
Wenn nur das Datum brauchst, musst Du noch DATE drumherumsetzen.
Code:
Date(Timestamp_Format(Digits(NumDat), 'YYMMDD'))
Wenn Du allerdings mit Query/400 arbeitest, was ich stark vermute, wird das ganze ungleich schwieriger, da es weder eine Timestamp_Format-Funktion noch eine Case-Anweisung gibt.
Birgitta
-
Zitat von B.Hauser
So wie es aussieht handelt es sich bei Deinem Datum um ein
Wenn Du allerdings mit Query/400 arbeitest, was ich stark vermute, wird das ganze ungleich schwieriger, da es weder eine Timestamp_Format-Funktion noch eine Case-Anweisung gibt.
Birgitta
Na ja, er kann sich doch ne kleine View basteln wo alles drin steht. Oder wenn das nicht klappt mit Excel arbeiten und dann allen Leuten vorher kündigen........ ;-)
GG 3854
-
Es ist leider AS400 heheh
Ich komme zu keinem Ergebnis. Ich könnte die Datei im Excel bearbeiten, jedoch fände ich es schöner, dieses Problem im Query zu lösen.
Gruss
-
nimm qmqry statt query.
da hast du SQL zur Verfügung.
und beschreibe mal vernünftig wie die Daten sind, die du hast.
tag / monat jahr2 / Jahr4 seperat,
jjmt
jmt
tmjj
tmj
DATUM
...
Da macht der lieber Excel .... kopfschüttel
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Oder baue eine View, die kannst du dann mit Query bearbeiten.
-
Zitat von Fuerchau
Oder baue eine View, die kannst du dann mit Query bearbeiten.
Ich befürchte er weiß nicht was das ist, sonst hätte er auf mein Post ne andere Antwort gegeben.
-
Rein im Query wird die Anforderung nicht so leicht umsetzbar sein.
Schon alleine wegen dem 2-Stelligen Jahr.
Hier sollte dir jemand mit SQL-Wissen eine sg. View bauen welche die gesamten Datumsberechnungen enthält und auf welche du dann mit Query aufsetzen kannst.
Schnelles 'dirty' Beispiel:
Code:
CREATE OR REPLACE VIEW SCHEMA.GEB_DATE AS (
SELECT CAST(
CASE WHEN LEFT(DIGITS(NumDat), 2) > RIGHT(YEAR(CURRENT_DATE), 2)
-- Falls die letzten beiden Stellen des Geburtstagsjahres größer dem aktuellen sind dann wird es vermutlich 19.. sein
THEN DATE(TIMESTAMP_FORMAT(DIGITS(NumDat), 'RRMMDD'))
ELSE DATE(TIMESTAMP_FORMAT(DIGITS(NumDat), 'YYMMDD')) END
+ 32 YEARS AS DECIMAL(8, 0)) GEB32
FROM SCHEMA.TABLE)
Für den Moment würde es funktionieren.
Wie es dann aber in ein paar Jahrzehnte ausieht weiß ich nicht :-)
-
Hallo
so müsste es auch gehen (und auch so bei mir in Gebrauch)
Basis 6stellig (zb. yymmdd ):
Ergebnisfelder definieren :
jahr substr(digits(yymmdd), 1, 2)
monat substr(digits(yymmdd), 3, 2)
tag substr(digits(yymmdd), 5, 2)
dat_a tag!!'.'!!monat!!'.'!!'20'!!jahr
dat_b date(dat_a)
dat_a hat automatische Länge 1 (alpha)
dat_b hat automatisch Länge 8, Datum (L)
mit dat_b kannst du jetzt rechnen = - x days, + x years ...
Gruss
Jotho
Similar Threads
-
By Jenne in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 19-12-19, 17:49
-
By ExAzubi in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 19-07-16, 11:44
-
By Robi in forum NEWSboard Server Software
Antworten: 1
Letzter Beitrag: 28-10-14, 16:16
-
By dschroeder in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 27-11-13, 13:36
-
By hs in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 27-09-01, 11:25
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks