`SQL`编写判断是否为工作日函数编写

news2024/9/24 5:27:36

SQL编写判断是否为工作日函数编写

最近的自己在写一些功能,遇到了对于工作日的判断,我就看了看sql,来吧!~(最近就是好疲惫)

我们一起看看(针对ORACLE)

1.声明:

CREATE OR REPLACE PACKAGE GZYW_2109_1214.PKG_FUN_GETDAY_HDAY AS 
 /**  
  *  通过节假日代码获取指定的日期[查找基准日期前/后N自然/工作日的日期] 
  * 注:此函数只适用于节假日表中只保存了节假日日期(非工作日记录)的情况 , 
  * 警告:若没有设置范围内的节假日信息,此函数会计算出错误的返回日期 
  * _Stand_Date 基准日期, 
  * C_MKT_Code 节假日代码, 
  * N_Interval_Day 间隔天数(大于0向后查找,小于0向前查找,等于0返回基准日期), 
  * C_Type 日期类型 'W'工作日,'D'自然日,'DW'自然日递延至工作日 
  */ 
 Function GETDAY_HDAY(C_HDay_Code varchar2,D_Stand_Date date,N_Interval_Day int,C_Type varchar2) return Date; 
 END PKG_FUN_GETDAY_HDAY;

2.主体

CREATE OR REPLACE PKG_FUN_GETDAY_HDAY AS 
 Function getDay_HDay(C_HDay_Code varchar2, 
 D_Stand_Date date, 
 N_Interval_Day int, 
 C_Type varchar2) 
 return Date as 
 D_Return Date; /*返回的日期*/ 
 D_Start Date; /*区间开始日期*/ 
 D_End Date; /*区间结束日期*/ 
 D_Tmp Date; 
 N_Count int := 1; 
 C_Hday varchar2(20) := C_HDay_Code; 
 begin 
  D_Return := D_Stand_Date; 
 /*判断参数是否合法*/ 
 if (('W' != C_Type) AND ('D' != C_Type) and ('DW' != C_Type)) then 
 return D_Return; 
 else 
  if (('D' = C_Type) or ('DW' = C_Type)) then 
 D_Return := D_Stand_Date + N_Interval_Day; 
  else 
 /*工作日的推算*/ 
 D_Start := D_Stand_Date; 
 D_End := D_Stand_Date + N_Interval_Day; 
  D_Return := D_End; 
  while (true) loop 
  exit when N_Count = 0; 
  begin 
  if (N_Interval_Day >= 1) then 
 select /*+RESULT_CACHE*/ count(*) 
 into N_Count 
 from T_P_BI_HDAY_SUB a 
 where a.C_HDay_Code = C_Hday 
  and a.D_HDay > D_Start 
  and a.D_HDay <= D_End 
  and a.c_Date_Type = 'H' 
 and a.N_Check_State = 1; 
 if (N_Count > 0) then 
 D_Start := D_End; 
  D_End := D_End + N_Count; 
  D_Return := D_End; 
  else 
 exit; /*退出*/ 
  end if; 
  else 
  /*如果是逆序*/ 
  if (D_Start > D_End) then 
 D_Tmp := D_End; 
 D_End := D_Start; 
  D_Start := D_Tmp; 
  end if; 
  select /*+RESULT_CACHE*/ count(*) 
  into N_Count 
  from T_P_BI_HDAY_SUB a 
  where a.C_HDay_Code = C_Hday 
  and a.D_HDay >= D_Start 
  and a.D_HDay < D_End 
  and a.c_Date_Type = 'H' 
  and a.N_Check_State = 1; 
  if (N_Count > 0) then 
  D_End := D_Start; 
  D_Start := D_End - N_Count; 
  D_Return := D_Start; 
  else 
  exit; /*退出*/ 
  end if; 
  end if; 
  end; 
  end loop; 
  end if; 
  if ('DW' = C_Type) and (N_Interval_Day>0) then 
  N_Count:=1; 
  while (true) loop 
  exit when N_Count = 0; 
  select /*+RESULT_CACHE*/ count(*) 
  into N_Count 
  from T_P_BI_HDAY_SUB a 
  where a.C_HDay_Code = C_Hday 
  and a.D_HDay = D_Return 
 and a.c_Date_Type = 'H' 
  and a.N_Check_State = 1; 
  if N_Count!=0 then 
  D_Return:=D_Return+1; 
  end if; 
  end loop; 
  end if; 
  end if; 
  return D_Return; 
 end; 
 END PKG_FUN_GETDAY_HDAY;

3.检验

CN:基准日期(以哪个国家进行注明)

DATE ‘2023-10-08’:你要检验的日期

-1:代表去取前一日日期

‘W’:只取前面‘-1’也就是前一日的工作日

SELECT PKG_FUN_GETDAY_HDAY.GETDAY_HDAY('CN', DATE '2023-10-08', -1, 'W')   AS TEST_DATA  FROM  TEST_TABLE a  WHERE  ROWNUM<2;

运行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1110783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开发小经验积累

今天使用langchain官方文档上的这个包的时候 遇到了这个报错 这个直觉判断肯定是版本问题&#xff0c;我先是去perplexity.ai搜了相关报错 后来没找到什么比较好的回答 这时候想到可以去看当前自己用的版本的langchain的源码&#xff0c;而利用vscode强大的功能&#xff0c;…

linux java 环境变量配置

前提已经存在jdk部署包&#xff0c;并且上传到服务器上 编辑&#xff1a;/etc/profile export JAVA_HOME/home/jdk1.8.0_211/ export JRE_HOME/home/jdk1.8.0_211/jre/ export PATH$JAVA_HOME/bin:$JRE_HOME/bin:$PATH编辑位置&#xff1a; 之后source /etc/profile 查看java…

JDK API

Application Programming Interface 字符串、集合、文件、输入输出、网络、多线程 文档注释 文档注释是功能级注释&#xff0c;用来说明一个类&#xff0c;一个方法或一个常量的&#xff0c;因此只在上述三个地方使用。 文档注释可以使用Java自带的命令javaDoc来对这个类生成手…

写给正在互联网经历孤独和迷茫的你

这篇文章写给正在互联网上经历孤独和迷茫&#xff0c;失去信心和希望的人们。 最近有不少公众号粉丝跟我倒苦水&#xff0c;问这两年互联网怎么这么难&#xff0c;干啥啥不成&#xff0c;都快对互联网完全失去信心了。童话觉得为了大家的心病专门来开开方子很有必要&#xff0c…

第六节:Word中对象的层次结构

《VBA之Word应用》&#xff08;10178982&#xff09;&#xff0c;是我推出第八套教程&#xff0c;教程是专门讲解VBA在Word中的应用&#xff0c;围绕“面向对象编程”讲解&#xff0c;首先让大家认识Word中VBA的对象&#xff0c;以及对象的属性、方法&#xff0c;然后通过实例让…

AI智能分析视频监控系统如何助力智慧民宿规范化、安全最大化?

民宿智能监控系统是一种便捷而有效的安全解决方案&#xff0c;它可以提供全面的监控和保护民宿的功能。以下为具体方案&#xff1a; 1、视频监控 安装高清摄像头覆盖民宿的关键区域&#xff0c;如大门、入口、走廊和共用区域等。这些摄像头可以实时监控&#xff0c;记录入住和…

element-plus 表格-自定义样式实现2

<template><h2>表格修改样式利用属性修改</h2><h3>row-style 行样式</h3><h3>row-style header-row-style 不能改背景色</h3><h3>cell-style header-cell-style能改背景色</h3><el-tableref"tableRef":dat…

面向教育行业的身份和访问管理(IAM)解决方案

教育机构面临着严峻的挑战&#xff0c;不仅要管理不同的用户角色&#xff08;如教职员工、学生和非教学人员&#xff09;&#xff0c;还要管理具有多个角色的用户&#xff0c;这些角色的动态性质使预配过程进一步复杂化&#xff0c;此外&#xff0c;随着离线课程的增加&#xf…

AI机器人客服:模拟真人的工作场景揭秘

随着科技的高速发展&#xff0c;人工智能技术应用越来越广泛&#xff0c;在客服行业&#xff0c;AI机器人客服正逐渐成为企业与客户之间沟通和服务的主要方式。与传统的机器人客服相比&#xff0c;AI机器人客服更加智能、灵活&#xff0c;并且能够以模拟真人的方式与客户进行交…

【完美世界】最新预告,石昊辣手摧花,两大强者对决,云曦终于霸气一回

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 热血动漫《完美世界》第134集预告已经更新了&#xff0c;这一集看点十足。 首先&#xff0c;石昊在预告中展示了他辣手摧花的实力。为了保护云曦&#xff0c;他不得不与来自战族的敌人战斗。 战族美女和她的同…

【网络安全 --- xss-labs靶场】xss-labs靶场安装详细教程,让你巩固对xss漏洞的理解及绕过技巧和方法(提供资源)

一&#xff0c;资源下载准备 1-1 VMware 16.0 安装请参考以下博客&#xff0c;若已经安装请忽略&#xff1a; 【网络安全 --- 工具安装】VMware 16.0 详细安装过程&#xff08;提供资源&#xff09;-CSDN博客【网络安全 --- 工具安装】VMware 16.0 详细安装过程&#xff08;…

IDC:到2027年,全球生成式AI支出将达到1430亿美元

全球著名信息调查咨询机构IDC在官网公布了一项调查&#xff0c;到2027年&#xff0c;全球生成式AI&#xff08;Generative AI&#xff0c;简称Gen AI&#xff09;支出将达到1430亿美元&#xff0c;5年复合年增长率为73.3%。 该支出包括&#xff1a;生成式AI的软件以及相关基础…

ArrayList 源码解析(JDK1.8)

目录 一. 前言 二. 源码解析 2.1. ArrayList概览 2.2. 属性 2.3. 构造方法 2.3.1. ArrayList() 2.3.2. ArrayList(int initialCapacity) 2.3.3. ArrayList(Collection c) 2.4. 新增元素 2.4.1. add(E e) 2.4.2. add(int index, E element) 2.4.3. addAll(Collectio…

通过内网穿透远程控制家中Home Assistant智能家居系统

文章目录 前言1. 安装Home Assistant2. 配置Home Assistant3. 安装cpolar内网穿透3.1 windows系统3.2 Linux系统3.3 macOS系统 4. 映射Home Assistant端口5. 公网访问Home Assistant6. 固定公网地址6.1 保留一个固定二级子域名6.2 配置固定二级子域名 前言 Home Assistant&…

【纠错】遗传算法求解VRP计算车辆容量限制的代码有bug

关联文章 关联的博客文章为&#xff1a;《遗传算法求解带时间窗的VRP问题&#xff08;python&#xff09;》 原出错函数 源程序代码如下&#xff1a; def vehicle_capacity_restraint(chrom):# 计算一条染色体的车辆容量限制individual copy.deepcopy(chrom)split_flag_no…

Simian使用方法

1.下载 链接1&#xff1a;官网下载 链接2&#xff1a;压缩包 2.操作 1.双击exe启动 2.打开控制台&#xff0c;winR 输入cmd 3.输入操作语句 G:\1111\simian-2.5.10\bin\simian-2.5.10.exe -includes"G:\1111\test\*.cpp" -threshold3 > output.txt G:\1111\si…

Vuex中多个参数显示undefined的解决方案

笔者今天在使用Vuex中的mutations改变state里面的全局状态的值&#xff0c;获取到的数据却怎么都是第一个参数是可以获取到,但是第二个就获取不到&#xff0c;就显示undefined 问题代码 mutations: {multiparameter(state,id,newStatus) {console.log("数据的Key&#x…

【Java】java中的集合框架组成部分

集合框架中 单列与多列的区别 单列——一行只有一列数据 多列(双列)——一行两列数据 key value 集合框架组成部分&#xff1a; 1. Collection(存放单列数据) List 接口——存放数据可以允许重复的 ArrayList 底层基于 数组 数据结构实现LinkedList 底层基于 链表 数据结构实现…

seq“ 和 “time“ 字段

在RTP&#xff08;Real-time Transport Protocol&#xff09;报文中&#xff0c;"seq" 和 "time" 字段分别表示以下内容&#xff1a; 1. **Seq&#xff08;Sequence Number&#xff09;字段**&#xff1a;Seq字段是RTP头部中的一个16位字段&#xff0c;用…

Python---练习:判断是否为一个合法三角形(if else)

案例 判断是否为一个合法三角形 需求&#xff1a;输入三角形的3边&#xff0c;如果两边的长度大于第三条边&#xff0c;则代表是一个合法三角形 思路&#xff1a; 先确定什么是一个合法三角形-----就是任意两边的和&#xff0c;大于第三边。 就像下图&#xff0c;a b 展…