首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle sql如何获取一周的日期

问Oracle sql如何获取一周的日期
EN

Stack Overflow用户
提问于 2018-09-24 23:39:23
回答 1查看 1.2K关注 0票数 3

我有以下查询,可以获取日期的第几周:

代码语言:javascript
复制
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日

我怎么才能得到这个呢?

EN

回答 1

Stack Overflow用户

发布于 2018-09-24 23:57:08

甲骨文提供了the TRUNC(datestamp, format) function来以这种方式操作日期。您可以使用variety of format strings来获取一个季度的第一天、一年的第一天,甚至是该小时的第一天。

给定特定的日期戳值,Oracle将使用以下表达式返回当前周的第一天的午夜:

代码语言:javascript
复制
  TRUNC(datestamp,'DY')

您可以将日期添加到日期戳中。因此,此表达式将在一周的最后一天提供午夜

代码语言:javascript
复制
  TRUNC(datestamp,'DY') + 6 

当前周中所有行的WHERE子句选择器可能如下所示。

代码语言:javascript
复制
  WHERE datestamp >= TRUNC(SYSDATE,'DY')
    AND datestamp < TRUNC(SYSDATE,'DY') + 7

请注意,该范围的结束恰好在下周第一天(<)午夜之前。您需要它,因为您可能在一周的最后一天午夜之后有日期戳。(注意对日期戳范围使用BETWEEN。)

和,

代码语言:javascript
复制
SELECT TO_CHAR(TRUNC(SYSDATE,'DY'),'YYYY-MM-DD'),
       TO_CHAR(TRUNC(SYSDATE,'DY')+6,'YYYY-MM-DD')
  FROM DUAL;

以类似ISO的格式显示本周的第一个和最后一个日期。

日期算术很酷。每年至少学习一次DBMS中的日期算术函数是值得的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52482849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档