PostgreSQL存储过程-批量新增周末到节假日
步骤分析:
1.定义所需变量,含义详见注释
2.赋初值,删除即将新增的数据(避免重复新增周末)
3.计算开始时间所在的周日(第一个),若周六在开始之前再往下查七天
4.循环执行,若下一个周日在结束日期之前即执行,新增至节假日表
案例演示:
--删除存储过程(批量新增周末);执行sql
--DROP FUNCTION batch_add_weeks(begin_date varchar,end_date varchar);--定义(开始日期,截止日期),备注:结束时间的年份为假节日年份
CREATE OR REPLACE FUNCTION batch_add_weeks(begin_date varchar,end_date varchar)
RETURNS integer AS
$body$ declare --开始日期所在的周日first_sunday timestamp;--第一个或者下一个周日next_sunday timestamp;--周六,周日saturday varchar;sunday varchar;--年份,增加周数add_year varchar; add_weeks integer;ii integer;--测试打印sql字段--batch_add_weeks text;BEGIN ii = 1;--batch_add_weeks = '';add_year = to_char(to_date(end_date,'yyyy-mm-dd'),'yyyy');--删除即将批量新增的年度节假delete from tb_mf_festival where create_id = 'batch_add_weeks' and year = add_year and festival_code like add_year || 'week%';first_sunday = to_date(begin_date,'yyyy-mm-dd') + cast(-1 * ( to_number (to_char(to_date(begin_date,'yyyy-mm-dd'),-- 一周里的日子(1-7;周日是1)'D'),'99') - 1) ||' days' as interval);if(first_sunday - to_date(begin_date,'yyyy-mm-dd') <= interval '2 day' ) thennext_sunday = first_sunday + interval '7 days';else next_sunday = first_sunday;end if;for ii in 1..52 LOOP if (next_sunday - to_date(end_date,'yyyy-mm-dd') <= interval '1 day' ) then sunday = to_char(next_sunday, 'yyyy-mm-dd') ;saturday = to_char(next_sunday - interval '1 days', 'yyyy-mm-dd');INSERT INTO tb_mf_festival("festival_id", "create_id", "create_code", "create_name","create_date", "plat_id", "festival_code", "festival_name","start_date", "over_date", "status", "year")VALUES (replace(uuid_generate_v4()::varchar, '-',''), 'batch_add_weeks', 'batch_add_weeks', 'batch_add_weeks',current_timestamp, 'QD', add_year || 'week_' || extract (week from to_date(sunday,'yyyy-mm-dd')), add_year || '年第' || extract (week from to_date(sunday,'yyyy-mm-dd')) ||'周',saturday,sunday,'ENABLE', add_year);add_weeks = ii;end if;next_sunday = next_sunday + '7 days' as interval;end LOOP;return add_weeks;END;
$body$
LANGUAGE plpgsql;--执行
select batch_add_weeks ('2018-01-01','2018-12-31')
备注:
extract函数格式:extract (field from source) extract函数是从日期或者时间数值里面抽取子域, 比如年、月、日等。source必须是timestamp、time、interval类型的值表达式。 field是一个标识符或字符串,是从源数据中的抽取的域。
基本语法
PostgreSQL存储过程-批量新增周末到节假日相关推荐
- mysql存储过程遍历新增_MySQL存储过程:内部调用存储过程、存储过程实现遍历数据库建表以及修改字段...
转载: https://blog.csdn.net/weixin_42159024/article/details/81488788 实现功能: 升级数据库.通过遍历所有数据库,对每个数据库进行升级, ...
- plsql 存储过程 批量提交_Oracle 存储过程批量插入数据
oracle 存储过程批量插入大量数据 declare numCount number; userName varchar2(512); email varchar2(512); markCommen ...
- c mysql批量添加数据类型_mybatis学习之路----mysql批量新增数据
原文:https://blog.csdn.net/xu1916659422/article/details/77971867 接下来两节要探讨的是批量插入和批量更新,因为这两种操作在企业中也经常用到. ...
- linq to object 、linq to sql 、linq to entity 批量 新增、更新、删除功能扩展
最近在codeplex上找到了一个功能比较全的linq to object .linq to sql .linq to entity新增.修改.删除功能扩展的控件--magiq. 以linq to s ...
- Shell脚本案例:批量新增用户
Shell脚本案例:批量新增用户 1.准备用户数据文件 cat users.txt user1 1234567890 user2 1234567890 user3 1234567890 user4 1 ...
- C#判断某天是否是周末或者节假日示例
/// <summary> /// 判断是不是周末/节假日 /// </summary> /// <param name="date">日期&l ...
- mybatis高级查询,批量新增
review sql脚本 实体类 sql watch out mapper mapper test 之前的比较分散,自己用... sql脚本 -- auto-generated definition ...
- springmvc 结合ajax批量新增
目录 1. 需要注意的问题 2. 页面代码 3. controller定义参数接收 1. 需要注意的问题 mvc框架的处理日期问题 @ResponseBody响应对象是自定义对象,响应不是json @ ...
- mysql 存储过程 批量导入数据_sql 利用存储过程批量导入数据
什么是 存储过程(stored procedure)是一组为了完成特定功能的sql语句集,是利用sql server所提供的transact-sql语言所编写的程序.经编译后存储在中.存储过程是数据库 ...
最新文章
- C 语言中” 与””的区别
- Richard Feynman, 挑战者号, 软件工程,自顶而下
- 6.虚拟机类加载机制
- 笔记-计算机网络基础-5G
- 腾讯视频如何设置定时关机
- matlab中函数的公式计算,MATLAB怎样定义函数(入门) 有一函数 f(x,y)=x^2+sinxy+2y , 写一程序, 输入自变量的值,输出函数值....
- Linux操作系统原理与应用04:内存管理
- sql入门基础知识分享
- 药师帮完成1.33亿美元D轮融资,投资方为老虎环球基金、H Capital和DCM...
- 《重构》阅读笔记-代码的坏味道
- FISCO BCOS 微众银行 WeDPR 隐私解决方案 资料汇总
- linux安装btsync
- 电压跟随器的一点理解
- 大爽pygame入门教程 第一节 基础知识
- MATLAB信号与系统
- ubuntu 软件包管理
- 高情商的王维注解了低政商孟浩然的后半生
- Linux效劳器装机平安疾速进阶指南(5)
- IWEBSHOP开发一
- Python的判及格与否