È questo il modo migliore per determinare se una data Oracle è in un fine settimana?Determina se la data di Oracle è in un fine settimana?
select * from mytable
where
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');
È questo il modo migliore per determinare se una data Oracle è in un fine settimana?Determina se la data di Oracle è in un fine settimana?
select * from mytable
where
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');
A partire da Oracle 11g, sì. L'unica regione valida alternativa agnostica che ho visto è la seguente:
SELECT *
FROM mytable
WHERE MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7);
Perché il giorno giuliano funziona davvero? –
@ Michael-O - perché le date di Julian sono fondamentalmente un conteggio di giorni da un momento fisso, noto in tempo, puoi usare la matematica di base per determinare se fosse o meno un fine settimana, perché sai già quale giorno del giorno della settimana 1 era. Poiché gli altri calendari hanno lunghezze di un mese, lunghezze annuali, giorni bisestili e anni bisestili, è più difficile ricavare informazioni sul giorno della settimana per altri calendari, data una singola data con cui lavorare. – ninesided
Non una risposta alla domanda. Ma qualche altra informazione. Ci sono molti altri trucchi SQL con la data.
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
Ulteriori informazioni: to_char
funzione.
nessuno di questi risolve il problema, il primo è pericoloso poiché "giorno della settimana" dipende dalla regione, ad esempio: 1 = domenica negli Stati Uniti, lunedì nel Regno Unito. – ninesided
Vero e accettato. E io pretendo di rispondere alla domanda, ho appena aggiunto più informazioni. La tua risposta ha risolto il problema. – Guru
set NLS_TERRITORY prima
alter session set NLS_TERRITORY=SWEDEN;
Così si è sicuri che i numeri sono il fine settimana
MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7)
non è corretto! Il numero del giorno del fine settimana potrebbe essere 6 & 7, o 7 e 1, a seconda delle impostazioni NLS.
Così il test vero e proprio (a prescindere dal NLS-settings) è questo uno accennato prima:
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')
Penso che potresti non essere corretto qui, il formato 'J' rappresenta la data giuliana, il numero di giorni trascorsi da un punto fisso nel tempo ed è completamente indipendente dalle impostazioni NLS. Vedi questo articolo per riferimento: http://en.wikipedia.org/wiki/Julian_day#Finding_day_of_week_given_Julian_day_number – ninesided
A mio parere la migliore opzione è
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')
Se sei d'accordo con qualcun altro, dovresti inversiarli, non aggiungere codice duplicato. –
In realtà la fine settimana non è Sabato/Domenica in tutti i paesi, una manciata (20-30) paesi hanno un fine settimana in giorni diversi (fonte: en.wikipedia.org/wiki/Workweek_and_weekend) –