Esto obtendrá la semana (domingo - sábado) del trimestre:
SELECT TO_CHAR( SYSDATE, 'YYYY-"Q"Q-"W"' )
|| ( 7 + TRUNC( SYSDATE + 1, 'IW' ) - TRUNC( TRUNC( SYSDATE, 'Q' ) + 1, 'IW' ) ) / 7;
AS "Current Time"
FROM DUAL
Explicación :
- Puede encontrar el domingo que fue en o justo antes de una fecha dada usando
NEXT_DAY( TRUNC( date_value ), 'SUNDAY' ) - 7
(que depende delNLS_TERRITORY
configuración) oTRUNC( date_value + 1, 'IW' ) - 1
(que es más corto y no depende de ninguna configuración). TRUNC( date_value, 'Q' )
da la fecha del primer día del trimestre que contiene elvalue
fecha (es decir, 1 de enero, 1 de abril, 1 de julio o 1 de octubre).- Poniendo los dos juntos, el domingo o justo antes del primer día del trimestre viene dado por
TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1
- Por lo tanto, el número de días entre el domingo o justo antes del comienzo del trimestre y el domingo o justo antes de una fecha dada es:
( TRUNC( date_value + 1, 'IW' ) - 1 ) - ( TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1 )
- que se puede simplificar cancelando el-1
términos. - La diferencia de la cantidad de semanas es solo ese número dividido por 7 (pero da un valor indexado a 0 y desea que el número de semana del trimestre sea indexado a 1; agrega 1 semana al resultado o, antes de haciendo la división, agregue 7 días).