Donnerstag, 20. Juli 2017

Datumsspielereien (Teil 10) / Date gadgets (Part 10)

Beim Datum führen viele Wege nach Rom. Umwege, komplizierte Wege und kurze Wege.
Diese Erkenntnis hatte ich heute im Zusammenspiel mit der Generierung eines indizierbaren Datumsstring.

Ziel war eine Ausgabe in Form von YYYYMMDD auf Basis eines erfassten Datumfeldes.

Dummerweise ist der Fux mit reichlich Funktionen zur Datumsmanipulation und -verarbeitung ausgestattet, so dass es recht einfach ist, den Überblick zu verlieren.
DAY(), MONTH(), YEAR(), DATETIME(), DATE(), CTOD(), DTOT(), SET DATE TO und diverse weitere Funktionen die wir in den Datumsspielereien schon kennengelernt haben.

Die schnellste Methode den oben aufgezeigten Aufbau zu erhalten besteht im Einsatz von DTOC() mit dem ein Datum in einen Textstring gewandelt werden kann.
Wer jetzt glaubt, dass dafür noch weitere Funktionen nötig sind...

?CHRTRAN( DTOC( DATE() ) , [.] , [] ) && unvollständiges Beispiel :(

oder genauer so etwas oder vergleichbares (ergänzt aufgrund Matthias' Kommentar)

?SUBSTR(DTOC(DATE()),7)+SUBSTR(DTOC(DATE()),4,2)+SUBSTR(DTOC(DATE()),1,2)
?TRANSFORM(YEAR(DATE()))+PADL(MONTH(DATE()),2,[0])+PADL(DAY(DATE()),2,[0])

...irrt sich gewaltig :)

Irgendwann hat diese Funktion nämlich einen zweiten (optionalen) Parameter erhalten der einen indizierbaren Datumswert erzeugt.

* // returns the current date as YYYYMMDD
* // or YYMMDD, depending on your system configuration
?DTOC( DATE() , 1 )

Also: Vergesst komplizierte verschachtelte Funktionen. DTOC(,1) schafft es in minimaler Form.