[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jun 2020
    Beiträge
    5

    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Pie mal Daumen:

    (days(current days) - days(birthdate)) / 365.25
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Nov 2020
    Beiträge
    315
    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

  4. #4
    Registriert seit
    Jun 2020
    Beiträge
    5
    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

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  6. #6
    Registriert seit
    Aug 2006
    Beiträge
    2.073
    Zitat Zitat von B.Hauser Beitrag anzeigen
    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

  7. #7
    Registriert seit
    Jun 2020
    Beiträge
    5
    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

  8. #8
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    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!)

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Oder baue eine View, die kannst du dann mit Query bearbeiten.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Aug 2006
    Beiträge
    2.073
    Zitat Zitat von Fuerchau Beitrag anzeigen
    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.

  11. #11
    Registriert seit
    May 2007
    Beiträge
    295

    Red face

    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 :-)
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  12. #12
    Registriert seit
    Jun 2019
    Beiträge
    26
    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

  1. Bei Dateierstellung per SQL wird eine View gelöscht
    By Jenne in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 19-12-19, 18:49
  2. Antworten: 4
    Letzter Beitrag: 19-07-16, 12:44
  3. Antworten: 1
    Letzter Beitrag: 28-10-14, 17:16
  4. Wie wird man eine JVM wieder los?
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 27-11-13, 14:36
  5. Warum wird eine Kopie einer log. Datei erstellt
    By hs in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 27-09-01, 12:25

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •