¿Es esta la mejor manera de determinar si una fecha de Oracle es en un fin de semana?Determine si la fecha de Oracle es en un fin de semana?
select * from mytable
where
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');
¿Es esta la mejor manera de determinar si una fecha de Oracle es en un fin de semana?Determine si la fecha de Oracle es en un fin de semana?
select * from mytable
where
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');
A partir de Oracle 11g, sí. La única alternativa viable agnóstico región que he visto es el siguiente:
SELECT *
FROM mytable
WHERE MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7);
¿Por qué el día juliano realmente funciona? –
@ Michael-O - porque las fechas julianas son básicamente un recuento de días desde un punto fijo y conocido en el tiempo que puede usar las matemáticas básicas para determinar si fue o no un fin de semana, porque ya sabe qué día de la semana 1 fue Dado que otros calendarios tienen distintas longitudes de mes, largos de año, días bisiestos y años bisiestos, es más difícil obtener información sobre el día de la semana para otros calendarios, dada una fecha única para trabajar. – ninesided
No una respuesta a la pregunta. Pero algo más de información. Hay muchos más trucos de SQL con la fecha.
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
Más información aquí: to_char
function.
ninguno de estos resuelve el problema, el primero es peligroso ya que "día de la semana" depende de la región, por ejemplo: 1 = domingo en los EE. UU., Lunes en el Reino Unido. – ninesided
Verdadero y aceptado. Y no reclamo responder la pregunta, solo agregué más información. Tu respuesta resolvió el problema. – Guru
conjunto NLS_TERRITORY antes
alter session set NLS_TERRITORY=SWEDEN;
Así que usted está seguro de qué números son los fines de semana
MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7)
NO es correcta! El número de días de fin de semana puede ser 6 & 7, o 7 y 1, dependiendo de la configuración NLS.
Así que el criterio adecuado (con independencia de NLS-settings) es éste mencionó antes:
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')
Creo que puede ser incorrecto aquí, el formato 'J' representa la fecha juliana, el número de días desde un punto fijo en el tiempo, y es completamente independiente de la configuración de NLS. Consulte este artículo para referencia: http://en.wikipedia.org/wiki/Julian_day#Finding_day_of_week_given_Julian_day_number – ninesided
En mi opinión, la mejor opción es
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')
Si está de acuerdo con alguien más, debe revocarlos, no agregar código duplicado. –
En realidad, el fin de semana no es el sábado/Domingo en todos los países, un puñado (20-30) países tienen fin de semana en diferentes días (fuente: en.wikipedia.org/wiki/Workweek_and_weekend) –