sql >> Base de Datos >  >> RDS >> Oracle

Cómo determinar la semana de un trimestre en la consulta de Oracle

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 del NLS_TERRITORY configuración) o TRUNC( 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 el value 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).