服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Oracle - Oracle数据库如何获取当前自然周,当前周的起始和结束日期

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

2022-12-13 17:12WziH_CSDN Oracle

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

输出的结果如下所示:

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

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)可以展示出每个自然周的起始日期:

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

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")

其结果如下所示:

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

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表示季度。

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

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

其输出结果如下所示:

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

总结

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

原文地址:https://blog.csdn.net/WziH_CSDN/article/details/109668245

延伸 · 阅读

精彩推荐
  • Oracleoracle 创建表空间步骤代码

    oracle 创建表空间步骤代码

    oracle 创建表空间步骤代码,需要的朋友可以参考一下 ...

    oracle教程网3382019-11-20
  • Oracleoracle select执行顺序的详解

    oracle select执行顺序的详解

    本篇文章是对oracle select执行顺序进行了详细的分析介绍,需要的朋友参考下 ...

    oracle教程网7372019-11-23
  • OracleOracle数据库的备份与恢复案例详解

    Oracle数据库的备份与恢复案例详解

    这篇文章介绍了Oracle数据库的备份与恢复的方法,文中通过示例代码介绍的非常详细。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...

    学海无涯乐做舟11102022-01-12
  • Oracle解析PL/SQL Developer导入导出数据库的方法以及说明

    解析PL/SQL Developer导入导出数据库的方法以及说明

    本篇文章是对PL/SQL Developer导入导出数据库的方法以及说明进行了详细的分析介绍,需要的朋友参考下 ...

    Oracle教程网4822019-11-25
  • OracleOracle SecureFile的功能

    Oracle SecureFile的功能

    SecureFile功能是oracle 11g中对大对象(LOB)存储格式的完全重新设计实现,原来的LOB存储格式现在通称为BASIXFILE,它仍然是默认的存储方法,但是SECURFILE关键字开...

    Oracle教程网5112019-11-01
  • OracleOracle如何直接运行OS命令

    Oracle如何直接运行OS命令

    在Oracle 8i中,往往会出现要在存储过程中运行操作系统命令的情况。一般来说,利用Oracle Enterprise Manager设定作业时可以达到这个目的。但是由于OEM在设定作...

    Oracle教程网5772019-10-21
  • OracleOracle实现行转换成列的方法

    Oracle实现行转换成列的方法

    这篇文章主要介绍了Oracle实现行转换成列的方法,实例分析了Oracle创建及查询表的相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下 ...

    碉堡猫3052020-01-04
  • OracleOracle查询当前的crs/has自启动状态实例教程

    Oracle查询当前的crs/has自启动状态实例教程

    当我们开启或者关闭自启动后,我们如何查看当前CRS 是处于enable还是处于disable中呢?下面这篇文章主要给大家介绍了关于Oracle如何查询当前的crs/has自启动...

    AlfredZhao4562020-04-06