postgre 函数整理

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

  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 回帖 • 1 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 7 关注
  • 叶归
    5 引用 • 16 回帖 • 10 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    151 引用 • 257 回帖 • 1 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 568 关注
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    8 引用 • 26 回帖 • 1 关注
  • Outlook
    1 引用 • 5 回帖
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 544 关注
  • Flume

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

    9 引用 • 6 回帖 • 651 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    143 引用 • 442 回帖
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 76 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    84 引用 • 324 回帖 • 1 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 249 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 644 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 545 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 319 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 157 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 14 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    57 引用 • 25 回帖 • 8 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    116 引用 • 54 回帖 • 4 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 28 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 543 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 431 关注