zoukankan      html  css  js  c++  java
  • Oracle字符串转行函数

    前言

    有时候比如一个字符串 : namestr  内容:‘张三,李四,王五,刘八,肖六’  。

    一张表:pati_info_basic  字段:姓名,年龄等..

    我们要从该表中查出上述字符串包含的所有人的信息。

    此时用:

    select * from pati_info_basic where patiname where patiname in namestr

    肯定是不行的。而且有时候姓名之间不是用逗号相隔,而是用其他符号相隔的呢?

    解决方案

    一个实现思路是 :先把namestr字符串转成 张三李四各为一个元组,再用in查询。

    实现步骤:

    • 新建类型
    CREATE OR REPLACE TYPE "TY_ROW_STR_SPLIT"  as object (strValue VARCHAR2 (4000))
    CREATE OR REPLACE TYPE "TY_TBL_STR_SPLIT"   IS TABLE OF ty_row_str_split
    • 新建函数
    CREATE OR REPLACE FUNCTION string_split(p_str       IN VARCHAR2,
                                        p_delimiter IN VARCHAR2)
      RETURN ty_tbl_str_split IS
      j         INT := 0;
      i         INT := 1;
      len       INT := 0;
      len1      INT := 0;
      str       VARCHAR2(4000);
      str_split ty_tbl_str_split := ty_tbl_str_split();
    BEGIN
      len  := LENGTH(p_str);
      len1 := LENGTH(p_delimiter);
    
    
      WHILE j < len LOOP
        j := INSTR(p_str, p_delimiter, i);
    
        IF j = 0 THEN
          j   := len;
          str := SUBSTR(p_str, i);
          str_split.EXTEND;
          str_split(str_split.COUNT) := ty_row_str_split(strValue => str);
    
          IF i >= len THEN
            EXIT;
          END IF;
        ELSE
          str := SUBSTR(p_str, i, j - i);
          i   := j + len1;
          str_split.EXTEND;
          str_split(str_split.COUNT) := ty_row_str_split(strValue => str);
        END IF;
      END LOOP;
    
    
      RETURN str_split;
    END string_split;
    View Code
    • 函数示例
    select * from  table(string_split('张三||李四||王五||刘八||肖六' ,'||')) 

    这时候用in查询就没问题了,其中‘||’符号可替换为任意符号。

    自强不息,厚德载物
  • 相关阅读:
    html 上传图片前预览
    php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
    php 计算 pdf文件页数
    php 获取半年内每个月的订单数量, 总价, 月份
    php 获取两个数组之间不同的值
    小程序支付功能
    关于nginx的Job for nginx.service failed because the control process exited with error code.错误
    linux 安装 Apollo
    MongoDB待续。。。
    ABP vNext...待续
  • 原文地址:https://www.cnblogs.com/zhoufei2514/p/10185528.html
Copyright © 2011-2022 走看看