für InterBase und FireBird | ||
Funktionen enthalten in der FreeAdhocUDF.dll/.so/.dylib : | ||
Datums-/Zeit Funktionen | 139 Funktionen und 27 Varianten | |
Vorbemerkung | ||
Rechnen | 11 Funktionen | |
Ermitteln | 78 Funktionen und 23 Varianten | |
Formatieren | 16 Funktionen und 4 Varianten | |
Vergleichen | 4 Funktionen | |
Umwandeln | 7 Funktionen | |
Bewegliche Feiertage | 14 Funktionen | |
läuft nicht in
InterBase |
||
ab FireBird 2 statt 0, '' (Leerstring) oder '17.11.1858' <null> | ||
ab InterBase Version 6.0 kann diese Funktion ersetzt werden | ||
ab FireBird Version 1.0 kann diese Funktion ersetzt werden | ||
ab FireBird Version 2.1 kann diese Funktion ersetzt werden | ||
Output
RETURN
Mechanismus wenn nicht anderes angegeben: FREE_IT Die TestSQLs mit NULL funktionieren natürlich nur ab FireBird 2 |
Datum-/Zeit Funktionen: Vorbemerkung | ||
Für die
Zeitberechnung werden verschiedene Datums verwendet. Die wichtigsten
sind - das Julianische Datum (JD) - das modifizierte Julianische Datum (MJD) - das Dubliner Julianische Datum (DJD) - das ANSI Datum - das UNIX Datum nach dem POSIX-Standard Das Julianische Datum (JD) gibt die Zeit in Tagen an, die seit dem 1. Januar −4712 12:00 Uhr vergangen ist. Dem 1. Januar 2000 12:00 Uhr entspricht zum Beispiel das Julianische Datum 2.451.545,0. Das Julianische Datum darf nicht verwechselt werden mit einer Datumsangabe im Julianischen Kalender. Als fortlaufende Tageszählung ist das Julianische Datum frei von Unregelmäßigkeiten wie Schalttagen, unterschiedlich langen Monaten usw., wie sie in den meisten Kalendern auftreten. Es wird daher vor allem in der Astronomie zur Beschreibung zeitabhängiger Größen verwendet, da mit ihm sehr leicht Zeitdifferenzen berechnet werden können. Im Internationalen Geophysikalischen Jahr (1957/58) wurde ein modifiziertes Julianisches Datum (mJD oder MJD) eingeführt mit Nullpunkt am 17. November 1858 0:00 Uhr UT(Weltzeit): MJD = JD – 2.400.000,5. Es wurde zuerst verwendet, um die Flugbahn des Sputnik auf einer IBM 704 (36-Bit-Maschine) aufzuzeichnen. Die Firma Digital Equipment Corporation (DEC) verwendete das MJD in ihrem Betriebssystem VMS und ihrer Datenbank Rdb/VMS, an der ja bekanntlich Jim Starkey mitarbeitetete bevor er DEC verließ und ein eigenes RDBMS (relational database management system) entwarf (Groton DataBase), aus dem dann InterBase entstand. Das MJD wird hauptsächlich in der Geodäsie, Geophysik und Raumfahrt verwendet, konnte sich in der Astronomie jedoch nicht durchsetzen. Das Dubliner Julianisches Datum (DJD): Eine weitere Version eines Julianischen Datums beginnt die Zählung der Tage mit dem Beginn des Jahres 1900 (z. B. in Microsoft Excel, Lotus-123, Delphi) oder dem des Jahres 1904 (Microsoft Excel für Mac OS). Da die Zählung am 1. Januar nicht mit der Null, sondern mit dem Wert „1“ beginnt, ist der korrekte Nullpunkt der Zählung der 31. Dezember 1899 0:00 Uhr. Für zusätzliche Verwirrung sorgt, dass einige Programme das Jahr 1900 fälschlicherweise als Schaltjahr ansehen und daher für Tage nach dem 28. Februar 1900 inkonsistente Daten liefern (Nullpunkt ist dann der 30. Dezember 1899, 0:00 Uhr). Das ANSI-Datum legt den 1. Januar 1601 als Tag „1“ fest. Es dient als Ursprung der Datumszählung in der Programmiersprache COBOL. Das UNIX-Datum ist eine einfache Zeitdefinition, die 1969 für das Betriebssystem Unix entwickelt und als POSIX-Standard festgelegt wurde. In den ersten Tagen von Unix wurde die Definition mehrfach geändert. Seit mehreren Jahrzehnten ist sie jedoch stabil. Die Unixzeit zählt die vergangenen Sekunden seit dem 1. Januar 1970 00:00 h UTC (Koordinierte Weltzeit), wobei Schaltsekunden nicht mitgezählt werden. Dieses Startdatum wird auch als The EPOCH bezeichnet. (siehe http://de.wikipedia.org/wiki/Julianisches_Datum und http://de.wikipedia.org/wiki/Unixzeit) InterBase und FireBird verwenden das modifizierte Julianische Datum was den 17.11.1858 als Tag 0 definiert. |
||
Datum-/Zeit Funktionen: Vergleichen | ||
F_MAXDATE | kompatibel
zu
FreeUDFLib,
FreeUDFLibC, FreeUDFLib AvERP Input/Output-kompatibel zu rFunc (MAXDATE) |
|
Entrypoint | maxdate | UTF-8 kompatibel |
Input | TIMESTAMP TIMESTAMP |
Datum
optional
Uhrzeit
1 Datum optional Uhrzeit 2 |
Output | TIMESTAMP | das Größere der beiden eingegebenen Datum |
TestSQL SELECT '01.10.2005 15:00:00' AS ISCORRECT, F_MAXDATE('22.08.2000 14:38:12', '01.10.2005 15:00:00') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_MAXDATE(NULL, NULL) FROM RDB$DATABASE; |
||
F_MINDATE | kompatibel
zu
FreeUDFLib,
FreeUDFLibC, FreeUDFLib AvERP Input/Output-kompatibel zu rFunc (MINDATE) |
|
Entrypoint | mindate | UTF-8 kompatibel |
Input | TIMESTAMP TIMESTAMP |
Datum
optional
Uhrzeit
1 Datum optional Uhrzeit 2 |
Output | TIMESTAMP | das Kleinere der beiden eingegebenen Datum |
TestSQL SELECT '22.08.2000 14:38:12' AS ISCORRECT, F_MINDATE('22.08.2000 14:38:12', '01.10.2005 15:00:00') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_MINDATE(NULL, NULL) FROM RDB$DATABASE; |
||
F_EQUALDATE | kompatibel zu FreeUDFLib AvERP, GrUDF | |
Entrypoint | equaldate | UTF-8 kompatibel |
Input | TIMESTAMP TIMESTAMP |
Datum
optional
Uhrzeit
1 Datum optional Uhrzeit 2 |
Output | INTEGER | 1 = Datum ist gleich, 0 = Datum ist ungleich |
Zeit
kann mit eingegeben werden, berücksichtigt
dabei aber nur
das Datum. TestSQL SELECT 1 AS ISCORRECT, F_EQUALDATE('20.02.2004 10:00:00', '20.02.2004 11:00:00') FROM RDB$DATABASE; SELECT 0 AS ISCORRECT, F_EQUALDATE('20.02.2004 10:00:00', '21.02.2004 11:00:00') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_EQUALDATE(NULL, NULL) FROM RDB$DATABASE; |
||
F_EQUALDATETIME | kompatibel
zu FreeUDFLib AvERP, GrUDF Input/Output-kompatibel zu rFunc (DTEQUAL) |
|
Entrypoint | equaldatetime | UTF-8 kompatibel |
Input | TIMESTAMP TIMESTAMP |
Datum
optional
Uhrzeit 1 Datum optional Uhrzeit 2 |
Output | INTEGER | 1 = Datum ist gleich, 0 = Datum ist ungleich |
Berücksichtigt
dabei Datum und
Uhrzeit. TestSQL SELECT 1 AS ISCORRECT, F_EQUALDATETIME('20.02.2004 10:00:00', '20.02.2004 10:00:00') FROM RDB$DATABASE; SELECT 0 AS ISCORRECT, F_EQUALDATETIME('20.02.2004 10:00:00', '20.02.2004 11:00:00') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_EQUALDATETIME(NULL, NULL) FROM RDB$DATABASE; |
||
Datum-/Zeit Funktionen: Umwandeln | ||
F_STRTOTIME | kompatibel zu FreeUDFLibC | |
Entrypoint | strtotime | UTF-8 kompatibel |
Input | CSTRING(11) | anglophile Uhrzeit (z.B. 05:04:01 AM) als String |
Output | TIME | 24-Stunden-Uhrzeit |
Eingabeformat
kann jeweils 1- oder 2-stellig sein und die Trennung von AM/PM mit
oder
ohne Leerzeichen erfolgen, AM/PM muß in
Großbuchstaben eingegeben
werden. TestSQL SELECT '05:04:01' AS ISCORRECT, F_STRTOTIME('05:04:01 AM') FROM RDB$DATABASE; SELECT '17:04:01' AS ISCORRECT, F_STRTOTIME('5:4:1PM') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_STRTOTIME(NULL) FROM RDB$DATABASE; |
||
F_DATETODOUBLE | Input/Output-kompatibel zu rFunc (DATETODOUBLE) | |
Entrypoint | datetodouble | UTF-8 kompatibel |
Input | TIMESTAMP | Datum optional Uhrzeit |
Output | DOUBLE | Datum/Zeit als Flieskommazahl (vor dem Komma Datum, nach dem Komma Zeit) |
TestSQL SELECT 54205.59375 AS ISCORRECT, F_DATETODOUBLE('15.04.2007 14:15:00') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_DATETODOUBLE(NULL) FROM RDB$DATABASE; |
||
F_TIMETODOUBLE | Input/Output-kompatibel zu rFunc (TIMETODOUBLE) | |
Entrypoint | timetodouble | UTF-8 kompatibel |
Input | TIMESTAMP | Datum optional Uhrzeit |
Output | DOUBLE | Datum/Zeit als Flieskommazahl (vor dem Komma 0, nach dem Komma Zeit) |
TestSQL SELECT 0.59375 AS ISCORRECT, F_TIMETODOUBLE('15.04.2007 14:15:00') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_TIMETODOUBLE(NULL) FROM RDB$DATABASE; |
||
F_DOUBLETODATE | Input/Output-kompatibel zu rFunc (DOUBLETODATE) | |
Entrypoint | doubletodate | UTF-8 kompatibel |
Input | DOUBLE | Datum/Zeit als Flieskommazahl (vor dem Komma Datum, nach dem Komma Zeit) |
Output | TIMESTAMP | Datum/Uhrzeit |
rFunc
bedient sich des modifizierten Julianischen Kalenders (0 =
17.11.1858
00:00:00) so daß als Datumsteil bei 0 statt 31.12.1899
17.11.1858
rauskommt. TestSQL SELECT '15.04.2007 14:15:00' AS ISCORRECT, F_DOUBLETODATE(54205.59375) FROM RDB$DATABASE; SELECT NULL' AS ISCORRECT, F_DOUBLETODATE(NULL) FROM RDB$DATABASE; |
||
F_DOUBLETOTIME | Input/Output-kompatibel zu rFunc (DOUBLETOTIME) | |
Entrypoint | doubletotime | UTF-8 kompatibel |
Input | DOUBLE | Datum/Zeit als Flieskommazahl (vor dem Komma Datum, nach dem Komma Zeit) |
Output | TIMESTAMP | Datum/Uhrzeit |
Berücksichtigt
nur die Nachkommastellen vom Input. rFunc bedient sich des modifizierten Julianischen Kalenders (0 = 17.11.1858 00:00:00) so daß als Datumsteil statt 31.12.1899 17.11.1858 rauskommt. TestSQL SELECT '31.12.1899 14:15:00' AS ISCORRECT, F_DOUBLETOTIME(0.59375) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_DOUBLETOTIME(NULL) FROM RDB$DATABASE; |
||
F_PERIOD2SECONDS | Funktion von adhoc | |
Entrypoint | period2seconds | UTF-8 kompatibel |
Input | CSTRING(254) | Zeit-Dauer im Format d:h:m:s |
Output | INTEGER | Anzahl Sekunden der Zeitperiode |
Die Zeitdauer
kann mit 2- oder 1-stelligen
Bereichen (dd:hh:mm:ss oder d:h:m:s) eingegeben werden. Negative Zeitdauer wird mit einem "-" vor dem 1. Bereich eingegeben. Es sind Zeitdauern im Format Tag:Stunde:Minute:Sekunde (4 Bereiche) und Stunde:Minute:Sekunde (3 Bereiche) erlaubt. Enthält der Input weniger als 3 Bereiche oder kommen andere Zeichen vor, ist das Ergnis <null> bzw. Leerstring. Erlaubt als Input ist auch z.B. '0:26:0:0' statt '1:2:0:0' für 26 Stunden. TestSQL SELECT 4205 AS ISCORRECT, F_PERIOD2SECONDS('0:1:10:5') FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_PERIOD2SECONDS(NULL) FROM RDB$DATABASE; |
||
F_SECONDS2PERIOD | Funktion von adhoc | |
Entrypoint | seconds2period | UTF-8 kompatibel |
Input | INTEGER | Anzahl Sekunden einer Zeitperiode |
Output | CSTRING(254) | Zeit-Dauer im Format d:h:m:s |
Das
Ergebnis ist immer im Format Tag:Stunde:Minute:Sekunde (4 mal
2-stellige Bereiche) dd:hh:mm:ss. Negative Zeitdauern weren mit einem "-"vor dem 1. Bereich dargestellt. TestSQL SELECT '00:01:10:05' AS ISCORRECT, F_SECONDS2PERIOD(4205) FROM RDB$DATABASE; SELECT '-00:01:10:05' AS ISCORRECT, F_SECONDS2PERIOD(-4205) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_SECONDS2PERIOD(NULL) FROM RDB$DATA SELECT NULL AS ISCORRECT, F_SECONDS2PERIOD(NULL) FROM RDB$DATABASE; |
||
Datum-/Zeit Funktionen: Bewegliche Feiertage | ||
F_WEIBERFASTNACHT | Funktion
von
adhoc |
|
Entrypoint | weiberfastnacht | UTF-8 kompatibel |
Input | INTEGER | Jahr, für welches die Weiberfastnacht berechnet werden soll |
Output | DATE | Datum Weiberfastnacht des gewählten Jahres |
TestSQL SELECT '15.02.2007' AS ISCORRECT, F_WEIBERFASTNACHT(2007) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_WEIBERFASTNACHT(NULL) FROM RDB$DATABASE; |
||
F_ROSENMONTAG | Funktion
von
adhoc |
|
Entrypoint | rosenmontag | UTF-8 kompatibel |
Input | INTEGER | Jahr, für welches der Rosenmontag berechnet werden soll |
Output | DATE | Datum des Rosenmontag des gewählten Jahres |
TestSQL SELECT '19.02.2007' AS ISCORRECT, F_ROSENMONTAG(2007) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_ROSENMONTA(NULL) FROM RDB$DATABASE; |
||
F_KARNEVALSDIENSTAG | Funktion
von
adhoc |
|
Entrypoint | karnevalsdienstag | UTF-8 kompatibel |
Input | INTEGER | Jahr, für welches der Karnevalsdienstag berechnet werden soll |
Output | DATE | Datum des Karnevalsdienstag des gewählten Jahres |
TestSQL SELECT '20.02.2007' AS ISCORRECT, F_KARNEVALSDIENSTAG(2007) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_KARNEVALSDIENSTAG(NULL) FROM RDB$DATABASE; |
||
F_ASCHERMITTWOCH | Funktion
von
adhoc |
|
Entrypoint | aschermittwoch | UTF-8 kompatibel |
Input | INTEGER | Jahr, für welches der Aschermittwoch berechnet werden soll |
Output | DATE | Datum des Aschermittwoch des gewählten Jahres |
TestSQL SELECT '21.02.2007' AS ISCORRECT, F_ASCHERMITTWOCH(2007) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_ASCHERMITTWOCH(NULL) FROM RDB$DATABASE; |
||
F_PALMSONNTAG | Funktion
von
adhoc |
|
Entrypoint | palmsonntag | UTF-8 kompatibel |
Input | INTEGER | Jahr, für welches der Palmrsonntag berechnet werden soll |
Output | DATE | Datum des Palmrsonntag des gewählten Jahres |
TestSQL SELECT '01.04.2007' AS ISCORRECT, F_PALMSONNTAG(2007) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_PALMSONNTAG(NULL) FROM RDB$DATABASE; |
||
F_GRUENDONNERSTAG | Funktion
von
adhoc |
|
Entrypoint | gruendonnerstag | UTF-8 kompatibel |
Input | INTEGER | Jahr, für welches der Gründonnerstag berechnet werden soll |
Output | DATE | Datum des Gründonnerstag des gewählten Jahres |
TestSQL SELECT '05.04.2007' AS ISCORRECT, F_GRUENDONNERSTAG(2007) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_GRUENDONNERSTAG(NULL) FROM RDB$DATABASE; |
||
F_KARFREITAG | Funktion
von
adhoc |
|
Entrypoint | karfreitag | UTF-8 kompatibel |
Input | INTEGER | Jahr, für welches der Karfreitag berechnet werden soll |
Output | DATE | Datum des Karfreitag des gewählten Jahres |
TestSQL SELECT '06.04.2007' AS ISCORRECT, F_KARFREITAG(2007) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_KARFREITAG(NULL) FROM RDB$DATABASE; |
||
F_OSTERSAMSTAG | Funktion
von
adhoc |
|
Entrypoint | ostersamstag | UTF-8 kompatibel |
Input | INTEGER | Jahr, für welches der Ostersamstag berechnet werden soll |
Output | DATE | Datum des Ostersamstag des gewählten Jahres |
TestSQL SELECT '07.04.2007' AS ISCORRECT, F_OSTERSAMSTAG(2007) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_OSTERSAMSTAG(NULL) FROM RDB$DATABASE; |
||
F_OSTERDATUM | kompatibel zu FreeUDFLib AvERP, GrUDF | |
Entrypoint | osterdatum | UTF-8 kompatibel |
Input | INTEGER | Jahr, für welches der Ostersonntag berechnet werden soll |
Output | DATE | Datum des Ostersonntag des gewählten Jahres |
TestSQL SELECT '27.03.2005' AS ISCORRECT, F_OSTERDATUM(2005) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_OSTERDATUM(NULL) FROM RDB$DATABASE; |
||
F_OSTERMONTAG | Funktion
von
adhoc |
|
Entrypoint | ostermontag | UTF-8 kompatibel |
Input | INTEGER | Jahr, für welches der Ostermontag berechnet werden soll |
Output | DATE | Datum des Ostersonntags des gewählten Jahres |
TestSQL SELECT '09.04.2007' AS ISCORRECT, F_OSTERMONTAG(2007) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_OSTERMONTAG(NULL) FROM RDB$DATABASE; |
||
F_HIMMELFAHRT | Funktion
von
adhoc |
|
Entrypoint | himmelfahrt | UTF-8 kompatibel |
Input | INTEGER | Jahr, für welches Himmelfahrt berechnet werden soll |
Output | DATE | Datum Himmelfahrt des gewählten Jahres |
TestSQL SELECT '17.05.2007' AS ISCORRECT, F_HIMMELFAHRT(2007) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_HIMMELFAHRT(NULL) FROM RDB$DATABASE; |
||
F_PFINGSTSONNTAG | Funktion
von
adhoc |
|
Entrypoint | pfingstsonntag | UTF-8 kompatibel |
Input | INTEGER | Jahr, für welches der Pfingstsonntag berechnet werden soll |
Output | DATE | Datum des Pfingstsonntag des gewählten Jahres |
TestSQL SELECT '27.05.2007' AS ISCORRECT, F_PFINGSTSONNTAG(2007) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_PFINGSTSONNTAG(NULL) FROM RDB$DATABASE; |
||
F_PFINGSTMONTAG | Funktion
von
adhoc |
|
Entrypoint | pfingstmontag | UTF-8 kompatibel |
Input | INTEGER | Jahr, für welches der Pfingstmontag berechnet werden soll |
Output | DATE | Datum des Pfingstmontag des gewählten Jahres |
TestSQL SELECT '28.05.2007' AS ISCORRECT, F_PFINGSTMONTAG(2007) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_PFINGSTMONTAG(NULL) FROM RDB$DATABASE; |
||
F_FRONLEICHNAM | Funktion
von
adhoc |
|
Entrypoint | fronleichnam | UTF-8 kompatibel |
Input | INTEGER | Jahr, für welches Fronleichnam berechnet werden soll |
Output | DATE | Datum des Fronleichnam des gewählten Jahres |
TestSQL SELECT '07.06.2007' AS ISCORRECT, F_FRONLEICHNAM(2007) FROM RDB$DATABASE; SELECT NULL AS ISCORRECT, F_FRONLEICHNAM(NULL) FROM RDB$DATABASE; |
||