Oracle当前日期的下个半月,例如今天的下个半月是十月一号到十月十五号,如果是上半月,则显示本月的下半月
CREATE OR REPLACE FUNCTION FUN$_GETMONTH
RETURN VARCHAR2 IS
/***************************
*用途:根据当前日期,判断是上半月还是下半月,如果是下半月,则显示下月的上半月(201801001-21081015),如果是上半月,则显示本月的下半月
思路:先求出本月的对应几号和本月最后一天是几号
然后求出下个月,进行一一判断
*
********************************************/
V_RETURN VARCHAR2(20);--返回值20181001-20181015
V_DATE NUMBER;--当前日期对应的几号
V_MONTH NUMBER;--每个月的最后一天是几号,比如9月是30号
V_CURR_MONTH VARCHAR2(6);--本月的日期
V_NEXT_MONTH VARCHAR2(6);--下个月的日期
BEGIN
--当前日期对应的几号
SELECT TO_NUMBER(TO_CHAR((SYSDATE), 'DD')) INTO V_DATE FROM DUAL;
--取得每个月的最后一天是30 还是31 还是28 29
SELECT TO_NUMBER(TO_CHAR(LAST_DAY(SYSDATE), 'DD')) INTO V_MONTH FROM DUAL;
--获取下一个月201810
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,1),'YYYYMM') INTO V_NEXT_MONTH FROM DUAL;
--获取本月个月201809
SELECT TO_CHAR((SYSDATE),'YYYYMM') INTO V_CURR_MONTH FROM DUAL;
--判断一个月是30天
IF V_MONTH =30 THEN
IF V_DATE<=15 THEN
V_RETURN :=V_CURR_MONTH||'16'||'-'||V_CURR_MONTH||'30';
ELSE
V_RETURN :=V_NEXT_MONTH||'01'||'-'||V_NEXT_MONTH||'15';
END IF;
--判断一个月31天
ELSIF V_MONTH =31 THEN
IF V_DATE<=15 THEN
V_RETURN :=V_CURR_MONTH||'16'||'-'||V_CURR_MONTH||'31';
ELSE
IF TO_NUMBER(TO_CHAR(TO_DATE(V_NEXT_MONTH,'YYYYMM'), 'MM')) = 2 then --下一个月是2月,上半月只有14天
V_RETURN :=V_NEXT_MONTH||'01'||'-'||V_NEXT_MONTH||'14';
else
V_RETURN :=V_NEXT_MONTH||'01'||'-'||V_NEXT_MONTH||'15';
END IF;
END IF;
--判断2月只有28天
ELSIF V_MONTH = 28 THEN
IF V_DATE<=14 THEN
V_RETURN :=V_CURR_MONTH||'15'||'-'||V_CURR_MONTH||'28';
ELSE
V_RETURN :=V_NEXT_MONTH||'01'||'-'||V_NEXT_MONTH||'15';
END IF;
--判断2月只有29天
ELSIF V_MONTH = 29 THEN
IF V_DATE<=14 THEN
V_RETURN :=V_CURR_MONTH||'01'||'-'||V_CURR_MONTH||'15';
ELSE
V_RETURN :=V_NEXT_MONTH||'15'||'-'||V_NEXT_MONTH||'29';
END IF;
END IF;
DBMS_OUTPUT.PUT_LINE('V_DATE:'||V_DATE);
DBMS_OUTPUT.PUT_LINE('V_RETURN:'||V_RETURN);
RETURN V_RETURN;
--异常,报错处理
EXCEPTION WHEN
OTHERS THEN
DBMS_OUTPUT.PUT_LINE('函数有误。');
RETURN NULL;
END;
/
Oracle当前日期的下个半月,例如今天的下个半月是十月一号到十月十五号,如果是上半月,则显示本月的下半月相关推荐
- Oracle(11g)数据库教程之十五:Oracle触发器实例
Oracle(11g)数据库教程之十五:Oracle触发器实例 准备工作: 先启动Oracle,连接数据库 建立两个表:Goods(商品表).Orders(订单表) Goods(商品表) create ...
- Oracle数据库管理每周一例-第十五期 一些工具和小技巧
Oracle数据库管理每周一例(12.2,18c,19c) 2020-09-20 第十五期 一些工具和小技巧 1.EMCC 2.MOS 3.其他一些工具和技巧 下期预告: 第十五期 一些工具和小技巧 ...
- pandas使用groupby函数和count函数返回的是分组下每一列的统计值(不统计NaN缺失值)、如果多于一列返回dataframe、size函数返回分组下的行数结果为Series(缺失值不敏感)
pandas使用groupby函数和count函数返回的是分组下每一列的统计值(不统计NaN缺失值).如果多于一列返回dataframe.size函数返回分组下的行数结果为Series(不区分缺失值和 ...
- 第十五届全国大学生智能车竞赛室外光电创意组别进入线下比赛的队伍名单
作者:卓晴博士,清华大学自动化系 更新时间:2020-08-05 Wednesday 第十五届全国大学生智能车竞赛组委会在7月4日公布了室外光电ROS预赛方案 ,截止到7月20日,公布到213支队伍的 ...
- Atitit.png 图片不能显示 php环境下
Atitit.png 图片不能显示 php环境下 1.1. 不能显示png 下载png 检查使用bcompare与正常png对比.. 多了bom头 , "\xEF\xBB\xBF" ...
- [你必须知道的.NET]第十二回:参数之惑---传递的艺术(下)
本文将介绍以下内容: 按值传递与按引用传递深论 ref和out比较 参数应用浅析 接上篇继续,『第十一回:参数之惑---传递的艺术(上)』 4.2 引用类型参数的按值传递 当传递的参数为引用类型时,传 ...
- linux文件显示程序,Linux下文件显示命令简介
文件操作,但是目录操作我们也是一样的.因为在Linux中,一切皆文件,目录也是文件.只不过目录文件是的文件内容是里面的文件名列表. 下面这些内容主要针对文件的文件内容操作.对于目录文件的内容操作有专门 ...
- Java黑皮书课后题第5章:**5.21(金融应用:比较不同利率下的贷款)编写程序,让用户输入输入贷款总额和以年为单位的贷款期限,然后显示利率从5%到8%每次递增1/8的各种利率下,每月支付额和总支付
**5.21(金融应用:比较不同利率下的贷款)编写程序,让用户输入输入贷款总额和以年为单位的贷款期限,然后显示利率从5%到8%每次递增1/8的各种利率下,每月支付额和总支付 题目 题目概述 运行示例 ...
- 列表隔行变色、显示和隐藏下拉菜单、列表的高亮显示效果
列表隔行变色 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset=" ...
最新文章
- JupyterLab 3.0发布!
- angularjs定义对集合进行过滤的过滤器
- python xlrd关闭_Python在工作中的应用
- linux-认识与分析日志
- NIO中的SelectionKey
- 廉价raid_如何查找80行代码中的廉价航班
- Vue.js - Day5 - Webpack
- 简单php修改mysql数据类型_MySQL入门很简单—MySQL数据类型
- openjdk tomcat 安装
- php文章发布时间修改,Dedecms编辑文章更新当前时间的修改方法
- 接口自动化测试框架搭建(7、连接数据库提交sql方法以及打印日志方法封装)--python+HTMLTestRunnerCN+request+unittest+mock+db
- springboot-cache缓存和J2cache二级缓存框架(带点漫画)
- vegas Pro18.2021注册机补丁下载 如何做短视频基本参数设置及面板介绍
- 根据身份证判断男女(通用)
- 我的2019全年目标
- 2021年N1叉车司机考试APP及N1叉车司机免费试题
- 【node】------node连接mongodb操作数据库------【巷子】
- MFC软件欢迎界面(基于对话框,VS2013)
- [数据结构]基于二叉树的家谱系统
- android 接听和挂断实现方式