Sonntag ist der erste Wochentag in den USA
Montag ist der erste Wochentag in Deutschland
Grün-Donnerstag 2000 zum Beispiel:
Green_Thursday := to_date ('23.03.2000', 'DD.MM.YYYY');
in den USA: to_char (Green_Thursday, 'D') = 5
in der BRD: to_char (Green_Thursday, 'D') = 4
Das ist sub-optimal, da die Formatmaske abhängig von der NLS ist.
Meine Lösung in diesem Fall ist: Die Funktion German_Weekday
FUNCTION German_Weekday (P_Date IN DATE)
RETURN NUMBER IS
V_Delta NUMBER;
BEGIN
-- Referenz-Tag: Grün Donnerstag 2000 = Tag 4 in Deutschland
V_Delta := TO_NUMBER (TO_CHAR (TO_DATE ('23.03.2000',
'DD.MM.YYYY'),
'D')) - 4;
RETURN (TO_NUMBER (TO_CHAR (P_Date-V_Delta, 'D')));
END;
und American_Weekday
FUNCTION American_Weekday (P_Date IN DATE)
RETURN NUMBER IS
V_Delta NUMBER;
BEGIN
-- Referenz-Tag: Grün Donnerstag 2000 = Tag 5 in USA
V_Delta := TO_NUMBER (TO_CHAR (TO_DATE ('23.03.2000',
'DD.MM.YYYY'),
'D')) - 5;
RETURN (TO_NUMBER (TO_CHAR (P_Date-V_Delta, 'D')));
END;
diese Funktion gibt nun immer den korrekten deutschen Wochentag zurück, unabhängig von der NLS.
viel Spass damit
Gerd