步骤分析:

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存储过程-批量新增周末到节假日相关推荐

  1. mysql存储过程遍历新增_MySQL存储过程:内部调用存储过程、存储过程实现遍历数据库建表以及修改字段...

    转载: https://blog.csdn.net/weixin_42159024/article/details/81488788 实现功能: 升级数据库.通过遍历所有数据库,对每个数据库进行升级, ...

  2. plsql 存储过程 批量提交_Oracle 存储过程批量插入数据

    oracle 存储过程批量插入大量数据 declare numCount number; userName varchar2(512); email varchar2(512); markCommen ...

  3. c mysql批量添加数据类型_mybatis学习之路----mysql批量新增数据

    原文:https://blog.csdn.net/xu1916659422/article/details/77971867 接下来两节要探讨的是批量插入和批量更新,因为这两种操作在企业中也经常用到. ...

  4. linq to object 、linq to sql 、linq to entity 批量 新增、更新、删除功能扩展

    最近在codeplex上找到了一个功能比较全的linq to object .linq to sql .linq to entity新增.修改.删除功能扩展的控件--magiq. 以linq to s ...

  5. Shell脚本案例:批量新增用户

    Shell脚本案例:批量新增用户 1.准备用户数据文件 cat users.txt user1 1234567890 user2 1234567890 user3 1234567890 user4 1 ...

  6. C#判断某天是否是周末或者节假日示例

    /// <summary> /// 判断是不是周末/节假日 /// </summary> /// <param name="date">日期&l ...

  7. mybatis高级查询,批量新增

    review sql脚本 实体类 sql watch out mapper mapper test 之前的比较分散,自己用... sql脚本 -- auto-generated definition ...

  8. springmvc 结合ajax批量新增

    目录 1. 需要注意的问题 2. 页面代码 3. controller定义参数接收 1. 需要注意的问题 mvc框架的处理日期问题 @ResponseBody响应对象是自定义对象,响应不是json @ ...

  9. mysql 存储过程 批量导入数据_sql 利用存储过程批量导入数据

    什么是 存储过程(stored procedure)是一组为了完成特定功能的sql语句集,是利用sql server所提供的transact-sql语言所编写的程序.经编译后存储在中.存储过程是数据库 ...

最新文章

  1. C 语言中” 与””的区别
  2. Richard Feynman, 挑战者号, 软件工程,自顶而下
  3. 6.虚拟机类加载机制
  4. 笔记-计算机网络基础-5G
  5. 腾讯视频如何设置定时关机
  6. matlab中函数的公式计算,MATLAB怎样定义函数(入门) 有一函数 f(x,y)=x^2+sinxy+2y , 写一程序, 输入自变量的值,输出函数值....
  7. Linux操作系统原理与应用04:内存管理
  8. sql入门基础知识分享
  9. 药师帮完成1.33亿美元D轮融资,投资方为老虎环球基金、H Capital和DCM...
  10. 《重构》阅读笔记-代码的坏味道
  11. FISCO BCOS 微众银行 WeDPR 隐私解决方案 资料汇总
  12. linux安装btsync
  13. 电压跟随器的一点理解
  14. 大爽pygame入门教程 第一节 基础知识
  15. MATLAB信号与系统
  16. ubuntu 软件包管理
  17. 高情商的王维注解了低政商孟浩然的后半生
  18. Linux效劳器装机平安疾速进阶指南(5)
  19. IWEBSHOP开发一
  20. Python的判及格与否

热门文章

  1. 权力的游戏字幕哪家强_使用权力游戏字幕
  2. 解析改变测试自动化的协作机器人
  3. 图像算法工程师的一般要求
  4. 联想拯救者Y7000P触摸板无法使用
  5. java除去类里面的黄色警告_java中使用list会出现黄色警告图标如何去除
  6. 可扩展性设计之数据切分
  7. 红米手机5 Plus启用root超级权限的步骤
  8. vue 替换路由地址参数(动态修改路由参数)
  9. 在excel中如何筛选重复数据_Excel如何快速筛选
  10. 常用ansible命令