Oracle数据库如何获取当前自然周,当前周的起始和结束日期

 更新时间:2022年12月12日 10:11:57   作者:WziH_CSDN  
Oracle数据库如何获取当前自然周,当前周的起始和结束日期问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Oracle获取当前自然周,当前周的起始和结束日期

SELECT to_char(sysdate,'iw')   from dual; --本周是第几个自然周

SELECT to_char(sysdate,'yyyy') into v_sbzq_nf from dual;  -- 当前年份

SELECT to_char(TRUNC(TO_DATE(to_char(sysdate,'yyyy-MM-dd'),'yyyy-MM-dd'),'IW'),'yyyy-MM-dd')  FROM DUAL;--本周的起始时间(本周周一日期)

SELECT to_char(TRUNC(TO_DATE(to_char(sysdate,'yyyy-MM-dd'),'YYYY-MM-DD'),'IW') + 6,'yyyy-MM-dd') FROM DUAL;--本周的结束时间(本周周日日期)

下面是使用存储过程向数据库中插入一条数据

数据格式 : 上报周期 起始时间 结束时间

xxxx年第xx周 xx.xx xx.xx

存储过程如下:

create or replace procedure PRC_T_SJSB_ZYGYPJG is

   v_sbzq_zs varchar2(20);--上报周期周数

   v_sbzq_nf varchar2(10); --上报周期年份

   v_start varchar2(10);  --起始月份

   v_end varchar2(10);  --结束月份

   v_sbzq varchar2(20); --上报周期

begin

   SELECT to_char(sysdate,'iw') into  v_sbzq_zs from dual; --本周是第几个自然周

   SELECT to_char(sysdate,'yyyy') into v_sbzq_nf from dual;

   SELECT to_char(TRUNC(TO_DATE(to_char(sysdate,'yyyy-MM-dd'),'yyyy-MM-dd'),'IW'),'yyyy-MM-dd') into v_start  FROM DUAL;--本周的起始时间(本周周一日期)

   SELECT to_char(TRUNC(TO_DATE(to_char(sysdate,'yyyy-MM-dd'),'YYYY-MM-DD'),'IW') + 6,'yyyy-MM-dd') into v_end  FROM DUAL;--本周的结束时间(本周周日日期)

   v_start:=substr(v_start,6);

   v_end :=substr(v_end,6);

   v_start :=replace(v_start,'/','.');

   v_start :=replace(v_start,'-','.');

   v_end :=replace(v_end, '/','.');

   v_end :=replace(v_end, '-','.');

   v_sbzq :=v_sbzq_nf||'年第'||v_sbzq_zs||'周';

   insert into T_SJSB_ZYGYPJG (sbzq,sbzt,startdate,enddate) values(v_sbzq,'0',v_start,v_end);
  
   commit;

end PRC_T_SJSB_ZYGYPJG;

Oracle获取自然周数

在Oracle中,Mysql中以及Hive中,SQL实现同样的功能有时候可能要遵循不同的语法结构,尤其在日期操作方面区别较为明显。接下来,将Oracle中常用的周期统计梳理出来。

1. 按天统计

Oracle中通过to_char()函数来操作日期变量,通过其中的格式参数配置输出日期的格式。

格式参数值为’yyyymmdd’时,将日期统一转换为yyyymmdd(年月日)的方式输出。

select to_char(created_time,'yyyymmdd') as day,count(mobile_no)
from table
where to_char(created_time,'yyyymmdd') >= 20181201
group by to_char(created_time,'yyyymmdd')
order by min(created_time) asc

输出的结果如下所示:

2. 按自然周统计

to_char()函数的格式参数值为’iw’时,表示按自然周方式输出日期在全年中的周数排序值,自然周即日历上显示的周排列结果。

如果只输出周数,不便于排查数据,所以按自然周进行聚合时,最好能把该自然周的起始日期或结束日期显示出来,使结果一目了然。

select to_char(created_time,'iw') as week, min(created_time), count(mobile_no)
from table
where to_char(created_time,'yyyymmdd') >= 20181201
group by to_char(created_time,'iw')
order by min(created_time) asc

结果如下所示,其中week表示周数。通过MIN(created_time)可以展示出每个自然周的起始日期:

3. 按月统计

to_char()函数的格式参数值为’yyyymm’时可输出格式为yyyymm(年月)的月份统计结果。

select to_char(created_time,'yyyymm') as Month, count(mobile_no)
from table
where to_char(created_time,'yyyymm') >= 20181201
group by to_char(created_time,'yyyymm')

其结果如下所示:

4. 按季统计

to_char()的格式参数值为’q’,可实现按季度输出统计结果。

select to_char(created_time,'q') as q,count(mobile_no)
from table
where to_char(created_time,'yyyymmdd') >= 20180101
group by to_char(created_time,'q')
order by min(created_time) asc

其结果如下所示,Q表示季度。

5. 按年统计

to_char()函数的参数值为’yyyy’时可以实现按年输出统计结果。

select to_char(created_time,'yyyy') as y, count(mobile_no)
from table
where to_char(created_time,'yyyy') >= 2016
group by to_char(created_time,'yyyy')
order by y asc

其输出结果如下所示:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Win7 64环境下Oracle10g 64位版本安装教程

    Win7 64环境下Oracle10g 64位版本安装教程

    这篇文章主要为大家详细介绍了Win7 64环境下Oracle10g 64位版本安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Oracle 安装和卸载问题收集(集合篇)

    Oracle 安装和卸载问题收集(集合篇)

    在安装过程中出现的一些问题的解决办法。值得收藏与学习。比如在安装的时候如果有中文的路径则会出现类似这样的提示:加载数据库时出错:areasQueries
    2009-06-06
  • 一次简单的Oracle恢复Case实战记录

    一次简单的Oracle恢复Case实战记录

    这篇文章主要给大家介绍了一次简单的Oracle恢复Case实战过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • Oracle23ai 新特性IF [NOT] EXISTS语法支持的使用

    Oracle23ai 新特性IF [NOT] EXISTS语法支持的使用

    IF [NOT] EXISTS语法用于抑制因给定对象的存在或不存在而引发的潜在错误,允许您编写幂等DDL脚本,本文主要介绍了Oracle23ai 新特性IF [NOT] EXISTS语法支持的使用,感兴趣的可以了解一下
    2024-08-08
  • Oracle实现透明数据加密的代码示例

    Oracle实现透明数据加密的代码示例

    透明数据加密(TDE)是一种用于保护数据库中静态数据的加密技术,TDE通过自动加密数据库文件和日志文件,确保数据在磁盘上是加密的,从而防止未经授权的访问,以下以 Microsoft SQL Server 为例,实现 TDE 的步骤和代码示例,需要的朋友可以参考下
    2024-09-09
  • navicat导入oracle导出的dmp文件

    navicat导入oracle导出的dmp文件

    现在工作中常用Oracle数据库,但是查询工具还是Navicat最好用,不论是数据导入导出,还是执行语句,都很清晰明了,下面这篇文章主要给大家介绍了关于navicat导入oracle导出的dmp文件的相关资料,需要的朋友可以参考下
    2023-05-05
  • Oracle to_char函数的使用方法

    Oracle to_char函数的使用方法

    在Oracle数据库中,to_char函数是我们最常用的函数之一,下文对to_char函数的应用作了详细的介绍,如果您感兴趣的话,不妨一看
    2014-08-08
  • Oracle 存储过程总结(一、基本应用)

    Oracle 存储过程总结(一、基本应用)

    Oracle 存储过程总结 基本应用技巧,大家可以学习下oracle存储过程最基本的东西。
    2009-07-07
  • Oracle 10g安装配置方法图文教程

    Oracle 10g安装配置方法图文教程

    这篇文章主要为大家详细介绍了Oracle 10g安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • oracle分页存储过程 oracle存储过程实例

    oracle分页存储过程 oracle存储过程实例

    这篇文章主要介绍了oracle存储过程实例,实现oracle查询数据分页,大家参考使用吧
    2014-01-01

最新评论