create or replace function FUNC_GET_DATE_BY_WEEK
(
theYearWeek IN VARCHAR2
)
return date is
normalDate date;
--根据四位年周获取当周一的日期

errorMsg VARCHAR2(500);
strLength number;
yearFirstDay date;
daySeqInWeek number;
firstDayInFirstWeek date;
strWeek number;

begin
errorMsg:= '';
SELECT LENGTH(theYearWeek) INTO strLength FROM DUAL;
IF strLength = 4 THEN
--获取当年第一天
SELECT TO_DATE(SUBSTR(theYearWeek,0,2)||'0101','YYMMDD') INTO yearFirstDay FROM DUAL;
ELSE
errorMsg:='输入格式不正确,无法转换';
SELECT TRUNC(SYSDATE) INTO normalDate FROM DUAL;
RETURN normalDate;
END IF;
--------------------------------------
---获取当年第一天所在周周一的日期
--------------------------------------
--获取当年第一天是所在周的第几天
SELECT SUBSTR(TO_CHAR(yearFirstDay,'IWD'),LENGTH(TO_CHAR(yearFirstDay,'IWD')),1) INTO daySeqInWeek FROM DUAL;
IF daySeqInWeek = 1 THEN
--因为oracle周从周日算起,所以如果是周的第一天要加一才是周一的日期
SELECT yearFirstDay + 1 INTO firstDayInFirstWeek FROM DUAL;
ELSE
--非第一天则减
SELECT yearFirstDay - (daySeqInWeek - 2) INTO firstDayInFirstWeek FROM DUAL;
END IF;
SELECT SUBSTR(theYearWeek,3,2) INTO strWeek FROM DUAL;
--当年第一天所在周周一的日期加上周数即是所求
SELECT firstDayInFirstWeek + 7 * (strWeek - 1) INTO normalDate FROM DUAL;
return(normalDate);
end;

参考:https://www.2cto.com/database/201401/269429.html(oracle周相关概念)

oracle根据四位年周取当周周一的日期函数的更多相关文章

  1. php 根据周数获取当周的开始日期与最后日期

    /** * 根据第几周获取当周的开始日期与最后日期 * @param int $year 年份 $weeks = get_week($year) * @param 如获取第18周的开始日期$weeks ...

  2. js-获取两个字符串日期的相隔周

    例如说"2017-04-01 23:00:00"是周六, "2017-04-28 23:00:00"是周五,包含各自所在的那一周,我真正需要获得的结果是5个周. ...

  3. Oracle 查询出来的数据取第一条

    Oracle 查询出来的数据取第一条 --------------------------------------------------------------------------- 转载自:h ...

  4. [Oracle]数据库的Control File 取Dump后的样例

    [Oracle]数据库的Control File 取Dump后的样例: 片段截取-------------------------------(size = 40, compat size = 40, ...

  5. sql中计算某天是全年的第几周及取得某天的所在周的周一的日期的函数

    --取得某天的所在周的周一的函数 CREATE FUNCTION getMondayBtDate(@date datetime) RETURNS date AS begin DECLARE @week ...

  6. 【函数】Oracle函数系列(2)--数学函数及日期函数

    [函数]Oracle函数系列(2)--数学函数及日期函数 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不 ...

  7. ORACLE 日期函数

    ORACLE 日期函数 SYSDATE  当前的数据库系统时间 ADD_MONTHS(加减指定的月份) MONTHS_BETWEEN(取两个日期之间相隔的月数) LAST_DAY(取指定日期所在月的最 ...

  8. Oracle基础 (十三)日期函数

    日期函数 SYSDATE --当前系统时间 select sysdate from dual; EXTRACT --获取当前年份 select extract(year from sysdate) f ...

  9. Oracle的学习三:java连接Oracle、事务、内置函数、日期函数、转换函数、系统函数

    1.java程序操作Oracle java连接Oracle JDBC_ODBC桥连接 1.加载驱动: Class.forName("sun.jdbc.odbc.JdbcodbcDriver& ...

随机推荐

  1. oracle之Sequences

    产生这样的代码,运行即可

  2. 转)GPL、BSD、MIT、Mozilla、Apache和LGPL的区别

    开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区别 以下是上述协议的简单介绍: BSD开源协议 BSD开源协议是一个给于使用者很大自由的协议.基本上使用者可以”为所欲为”, ...

  3. SVG DOM常用属性和方法介绍(1)

    12.2  SVG DOM常用属性和方法介绍 将以Adobe SVG Viewer提供的属性和方法为准,因为不同解析器对JavaScript以及相关的属性和方法支持的程度不同,有些方法和属性是某个解析 ...

  4. linux下mysql开启远程访问权限及防火墙开放3306端口(mysql开放host访问权限)

    开启mysql的远程访问权限默认mysql的用户是没有远程访问的权限的,因此当程序跟数据库不在同一台服务器上时,我们需要开启mysql的远程访问权限.主流的有两种方法,改表法和授权法.相对而言,改表法 ...

  5. 磁盘512n,512e,4k原生磁盘的区别和操作系统支持

    磁盘按照物理扇区大小的不同分为三种512byte原生扇区硬盘(512n),4KB扇区仿真512byte(512E)磁盘,4kB扇区原生磁盘. 首先说物理扇区,扇区是硬盘上最小的读写单位,这个是硬盘决定 ...

  6. 一起做RGB-D SLAM(8) (关于调试与补充内容)

    “一起做”系列完结后,我收到不少同学给我的反馈.他们提了一些在程序编译/运行过程中的问题.我把它们汇总起来,组成了这个“补充篇”.你也可以看成是一个Q&A. Q: OpenCV的版本?A: 我 ...

  7. 获取iPod library中的媒体文件

    [获取iPod library中的媒体文件] The Media Player framework provides facilities for playing movie, music, audi ...

  8. mybatis Generator 生成配置文件

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE generatorConfiguration ...

  9. PV对第三方存储的访问模式支持

    访问模式 PV可以使用存储资源提供商支持的任何方法来映射到host中.如下的表格中所示,提供商有着不同的功能,每个PV的访问模式被设置为卷支持的指定模式.比如,NFS可以支持多个读/写的客户端,但可以 ...

  10. linux平台使用spark-submit以cluster模式提交spark应用到standalone集群

    shell脚本如下 sparkHome=/home/spark/spark-2.2.0-bin-hadoop2.7 $sparkHome/bin/spark-submit \ --class stre ...