我有以下查询,可以获取日期的第几周:
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日-1月7日
我怎么才能得到这个呢?
发布于 2018-09-24 23:57:08
甲骨文提供了the TRUNC(datestamp, format) function来以这种方式操作日期。您可以使用variety of format strings来获取一个季度的第一天、一年的第一天,甚至是该小时的第一天。
给定特定的日期戳值,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的格式显示本周的第一个和最后一个日期。
日期算术很酷。每年至少学习一次DBMS中的日期算术函数是值得的。
https://stackoverflow.com/questions/52482849
复制相似问题