Ist dies der beste Weg festzustellen, ob ein Oracle-Datum an einem Wochenende ist?Ermitteln, ob Oracle-Datum an einem Wochenende ist?
select * from mytable
where
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');
Ist dies der beste Weg festzustellen, ob ein Oracle-Datum an einem Wochenende ist?Ermitteln, ob Oracle-Datum an einem Wochenende ist?
select * from mytable
where
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');
Ab Oracle 11g ja. Die einzig gangbare Region Agnostiker Alternative, die ich gesehen habe, ist wie folgt:
SELECT *
FROM mytable
WHERE MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7);
Warum funktioniert der Julianische Tag eigentlich? –
@ Michael-O - weil Julianische Daten im Grunde eine Zählung von Tagen seit einem festen, bekannten Zeitpunkt sind, können Sie Grundrechenarten verwenden, um zu bestimmen, ob es ein Wochenende war oder nicht, weil Sie bereits wissen, welcher Tag des Wochentages 1 war. Da andere Kalender unterschiedliche Monatslängen, Jahreslängen, Schalttage und Schaltjahre haben, ist es schwieriger, Informationen über den Wochentag für andere Kalender abzuleiten, wenn nur ein einziges Datum zur Verfügung steht. – ninesided
keine Antwort auf die Frage. Aber noch mehr Informationen. Es gibt viel mehr SQL-Tricks mit Datum.
to_char(sysdate, 'd') --- day of a week, 1,2,3 .. to 7
to_char(sysdate, 'dd') --- day of a month, 1,2,3 .. to 30 or 31
to_char(sysdate, 'ddd') --- day of a year, 1,2,3 .. to 365 or 366
to_char(sysdate, 'w') --- week of a month, 1,2,3,4 or 5
to_char(sysdate, 'ww') --- week of a year, 1,2,3 .. to 52
Mehr hier: to_char
Funktion.
Keines davon löst das Problem, das erste ist gefährlich, da "Wochentag" regionabhängig ist, zum Beispiel: 1 = Sonntag in den USA, Montag im Vereinigten Königreich. – ninesided
Wahr und akzeptiert. Und ich behaupte, die Frage zu beantworten, fügte einfach weitere Informationen hinzu. Ihre Antwort hat das Problem gelöst. – Guru
Satz NLS_TERRITORY vor
alter session set NLS_TERRITORY=SWEDEN;
So sind Sie sicher, welche Zahlen sind Wochenenden
MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7)
ist nicht korrekt! Die Anzahl der Tage am Wochenende kann 6 & 7 oder 7 und 1 sein, abhängig von den NLS-Einstellungen.
So ist der Proper-Test (unabhängig von NLS-Einstellungen) ist dies eine schon erwähnt:
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')
Ich denke, dass Sie hier inkorrekt sein können, das 'J' Format stellt Julian Datum, die Anzahl der Tage seit einem festen Zeitpunkt, und ist völlig unabhängig von NLS-Einstellungen. Siehe diesen Artikel als Referenz: http://en.wikipedia.org/wiki/Julian_day#Finding_day_of_week_given_Julian_day_number – ninesided
Meiner Meinung nach die beste Option
istTO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')
Wenn Sie mit jemand anderem einverstanden sind, sollten Sie sie upvoten, keinen doppelten Code hinzufügen. –
Eigentlich ist das Wochenende ist nicht Samstag/Sonntag in allen Ländern haben eine Handvoll (20-30) Länder an verschiedenen Tagen ein Wochenende (Quelle: en.wikipedia.org/wiki/Workweek_and_weekend) –