Oracle sql как узнать дату недели - PullRequest
0 голосов
/ 24 сентября 2018

У меня следующий запрос, который получает неделю даты:

SELECT   pdm.serie, rta.matricula_ant, TO_CHAR (fecha, 'ww') semana,
         SUM (rta.kms_acumulados) kms,
           COUNT
              (DISTINCT (CASE
                    WHEN v.secuencia BETWEEN rta.sec_origen AND rta.sec_destino
                       THEN v.cod_inc
                    ELSE '0'
                 END
                )
              )
         - 1 numincidencias
    FROM (SELECT ms.tren, ms.fecha_origen_tren, ms.secuencia, ri.cod_inc
            FROM r_incidencias ri, mer_sitra ms
           WHERE ri.cod_serv = ms.tren
             AND ri.fecha_origen_tren = ms.fecha_origen_tren
             AND ri.cod_tipoin IN (SELECT cod_tipo_iincidencia
                                     FROM v_tipos_incidencias
                                    WHERE grupo = '45')
             AND ri.punto_desde = ms.cod_estacion) v,
         r_trenes_asignar rta,
         r_maquinas rm,
         planificador.pl_dh_material pdm
   WHERE rta.fecha BETWEEN TO_DATE ('21/09/2018', 'dd/mm/yyyy') AND TO_DATE ('21/09/2018',
                                                                  'dd/mm/yyyy'
                                                                 )
     AND rta.serie >= 4000
     AND rta.matricula_ant IS NOT NULL
     AND rm.matricula_maq = rta.matricula_ant
     AND rm.cod_serie = pdm.id_material
     AND rta.grafico BETWEEN pdm.desde AND pdm.hasta
     AND v.tren(+) = rta.tren
     AND v.fecha_origen_tren(+) = rta.fecha
GROUP BY pdm.serie, rta.matricula_ant, TO_CHAR (fecha,  'ww')
ORDER BY pdm.serie, rta.matricula_ant, TO_CHAR (fecha, 'ww')

Например, неделя 1

Я хочу отобразить

неделя 1: 1 января- 7 января

Как я могу получить это?

1 Ответ

0 голосов
/ 24 сентября 2018

Oracle предлагает функцию TRUNC(datestamp, format) для манипулирования датами таким образом.Вы можете использовать различные строки формата , чтобы получить первый день квартала, года или даже верхнюю часть часа.

При заданном значении даты и времени Oracle возвращает полночь впервый день текущей недели с этим выражением:

  TRUNC(datestamp,'DY')

Вы можете добавить дни к отметке даты.Поэтому это выражение дает вам полночь в последний день недели

  TRUNC(datestamp,'DY') + 6 

Селектор предложения WHERE для всех строк текущей недели может быть следующим:

  WHERE datestamp >= TRUNC(SYSDATE,'DY')
    AND datestamp < TRUNC(SYSDATE,'DY') + 7

Обратите внимание, чтоконец диапазона - незадолго до (<) полуночи первого дня следующей недели.Вам это нужно, потому что у вас могут быть метки даты после полуночи в последний день недели.(Осторожно, используя BETWEEN для диапазонов дат.)

И,

SELECT TO_CHAR(TRUNC(SYSDATE,'DY'),'YYYY-MM-DD'),
       TO_CHAR(TRUNC(SYSDATE,'DY')+6,'YYYY-MM-DD')
  FROM DUAL;

отображает первые и последние даты текущей недели в формате, подобном ISO.

Арифметика даты это круто.Вам стоит потрудиться изучать арифметические функции даты в вашей СУБД хотя бы раз в год.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...