postgre 函数整理

本贴最后更新于 1967 天前,其中的信息可能已经时异事殊

  1. phis2zx_number 返回 int8 类型的整型值,postgre 中最大的整型值为 numberic,返回值可设置为该类型
/** * 处理异常数据 * 比如 传入的值为'|||' */ CREATE OR REPLACE FUNCTION phis2zx_number( IN in_inputstr text -- 传入的原始字符串 ) RETURNS int8 LANGUAGE plpgsql AS $function$ /* * 函数说明:返回正常数字类型 * 参数:按要求填写参数 * * 返回:累加值 */ declare -- 入参说明 '\\\','|||' -- 程序变量说明 v_result boolean default false; begin ----------------------------------------------------将异常全部处理掉---------------------------------------------------- --需要匹配的字符串 if(in_inputstr is null or in_inputstr = '')then return 0; end if; --只匹配数字类型 select in_inputstr ~* '\d+' into v_result; --未匹配到 默认回0 if(v_result is false) then return 0; end if; ----------------------------------------------------------------------------------------------------------------------- --正常数据 return cast(substring(substring(in_inputstr from '\d+'),0,20) as numeric); end $function$;

  1. phis2zx_split_part_plus 针对 split_part 函数封装 排除错误输入的 text 值
CREATE OR REPLACE FUNCTION phis2zx_split_part_plus( IN in_inputstr text, -- 传入的原始字符串 IN in_matchregex varchar(64), --需要匹配的字符串 \u0001 \u0027 | in in_subindex integer --需要匹配的下标值 ) RETURNS TEXT LANGUAGE plpgsql AS $function$ /* * 函数说明:返回第一个下标或者第二个下标memo值 * 参数:按要求填写参数 * * 返回:累加值 */ declare -- 入参说明 2\x01du\u0027le\u0027sou\u0027ru -- 程序变量说明 v_bizopt record; -- 选项记录集 v_othertext TEXT DEFAULT ''; v_matchcount int4 default 0; begin --将异常全部处理掉 --需要匹配的字符串 if(in_inputstr is null or in_inputstr = '')then if(in_subindex = 1) then return 1; else return ''; --不匹配 直接返回空字符串(确实不知道是什么东西,有可能是垃圾数据) end if; end if; --没有需要匹配的 if(in_matchregex is null or in_matchregex = '')then if(in_subindex = 1) then return 1; else return ''; --不匹配 直接返回空字符串(确实不知道是什么东西,有可能是垃圾数据) end if; end if; --判断当前需要截取的字符串中是否包含需要匹配的字符串 且为匹配值为2 select strpos(in_inputstr,in_matchregex) into v_matchcount; if(v_matchcount = 0 or v_matchcount <> 2)then if(in_subindex = 1) then return 1; else return ''; --不匹配 直接返回空字符串(确实不知道是什么东西,有可能是垃圾数据) end if; end if; ----------------------------------------------------------------------------------------------------------------------- --正常数据 return split_part(in_inputstr,in_matchregex,in_subindex); end $function$ ;

  1. zx_transfer2zxfield 数据库 json 格式字段转换存储过程(特例)
/** * 該存儲過程對應數據庫兩個字段 分別是drugusage:用藥情況、drugguide:用藥指導(兩個字段使用的json格式一致) 外部需要傳遞0,1 加以區分 得到自己想要的字段 */ CREATE OR REPLACE FUNCTION zx_transfer2zxfield ( IN in_json_field jsonb, -- 选项JSON数组 IN in_usagetype varchar(64) --0用药情况,1用药指导 ) RETURNS jsonb LANGUAGE plpgsql AS $function$ /* * 函数说明:將公衛用藥情況/用药指导的字段轉換為数据库字段(僅限用於JSON數組對象格式) * 参数:按要求填写参数 * in_json_field : * [{"CmDrugID":"药物ID","Drugs":"药物名称","DailyTimes":"每日用药次数","EachDose":"每次用药剂量值","Remark":"每次用药剂量单位","Remark1":"用药备注","UsageType":"0用药情况,1用药指导"}] * * 返回:累加值 * [{"drugfreq": "用藥頻率", "drugmemo": "藥物備注", "drugname": "藥物", "drugdosage": "藥物用量", "drugunitcode": "計量單位編碼", "drugunitname": "計量單位名稱"}] */ declare -- 入参说明 -- 程序变量说明 v_bizopt record; -- 选项记录集 v_othertext TEXT DEFAULT ''; v_rec record; v_jsonb_array jsonb default '[]'; v_json_field jsonb default null; begin for v_rec in select drugs as drugname, dailytimes as drugfreq, eachdose as drugdosage, remark as drugunitname, '' as drugunitcode, remark1 as drugmemo, usagetype as drugtype --0用药情况,1用药指导 from (select * from jsonb_to_recordset(phis61.phis2field_lower(in_json_field)) AS t( cmdrugid varchar(64), -- 药物ID drugs varchar(64), -- 药物名称 dailytimes varchar(64), -- 每日用药次数 eachdose varchar(64), -- 每次用药剂量值 remark varchar(64), -- 每次用药剂量单位 remark1 varchar(64), -- 用药备注 usagetype varchar(64) --0用药情况,1用药指导 ) where t.usagetype = in_usagetype ) a loop select jsonb_build_object ( 'drugfreq', v_rec.drugfreq , 'drugmemo',v_rec.drugmemo, 'drugname',v_rec.drugname, 'drugdosage',v_rec.drugdosage, 'drugunitcode',v_rec.drugunitcode, 'drugunitname',v_rec.drugunitname ) into v_json_field; select jsonb_insert (v_jsonb_array,'{0}',v_json_field, false) into v_jsonb_array; end loop; RETURN v_jsonb_array; end $function$;

这个函数需要注意的是:phis61.phis2field_lower() postgre 的 jsonb_to_recordset 不能区分大小写,需要手动转换成特定的小写 才能获取到数据

  1. phis2field_lower 转小写函数
/** * 本存储过程实现: * 将省公卫平台业务数据字段大小寫全部轉成小寫jsonb格式返回 */ CREATE OR REPLACE FUNCTION phis2field_lower ( IN in_jsonarray_field jsonb -- 省公卫平台json格式數組 ) RETURNS jsonb LANGUAGE plpgsql AS $function$ /* * 函数说明: * 参数:按要求填写参数 * in_jsonarray_field : * [{"CmDrugID":"药物ID","Drugs":"药物名称","DailyTimes":"每日用药次数","EachDose":"每次用药剂量值","Remark":"每次用药剂量单位","Remark1":"用药备注","UsageType":"0用药情况,1用药指导"}] * * * 返回:平台统一格式的uuid(32位小写字符,无中间连字符) */ declare -- 入参说明 -- 程序变量说明 v_text text default ''; begin v_text := (in_jsonarray_field)::text; -- 如果选项无值,则直接返回 0 IF (v_text IS NULL OR trim(v_text) = '' ) THEN return -6; END IF; return (lower(replace (trim(v_text), '-', '')))::jsonb; end $function$;

如需转载 请注明本人。

  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • OnlyOffice
    4 引用 • 23 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    12 引用 • 54 回帖 • 174 关注
  • OneDrive
    2 引用 • 2 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 725 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 190 关注
  • 叶归
    7 引用 • 29 回帖 • 17 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖
  • 996
    13 引用 • 200 回帖 • 6 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 401 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 181 关注
  • Anytype
    3 引用 • 31 回帖 • 15 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    411 引用 • 3588 回帖 • 1 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    268 引用 • 666 回帖
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 233 回帖 • 2 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    952 引用 • 944 回帖
  • sts
    2 引用 • 2 回帖 • 230 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 21 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 8 关注
  • V2Ray
    1 引用 • 15 回帖
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 107 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    32 引用 • 99 回帖
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    290 引用 • 4494 回帖 • 653 关注
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1794 回帖 • 2 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 654 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 160 关注