Oracle笔记--字符串分割

  • 使用默认子串分割字符串,并获取指定序号的匹配项
  -- Author  : 一起种梧桐吧
  -- Created : 2024年9月20日 08:23:43
  -- Purpose : 默认使用'*#&!*'分割字符串,并返回指定序号的匹配项
  Function f_varcharsplit(p_instring Varchar2, p_occurrence Number)
    Return Varchar2 Is
    defaultchars Varchar2(20) := '*#&!*';
    instring     Varchar2(2000);
    returnstring Varchar2(2000);
  Begin
    -- 匹配项的序号必须>=1
    If p_occurrence <= 0 Then
      Return Null;
    End If;
    -- 当输入字符串的开头以默认分割字符串开始,则对输入字符串进行截取
    If substr(p_instring, 0, length(defaultchars)) = defaultchars Then
      instring := substr(p_instring, length(defaultchars));
    Else
      instring := p_instring;
    End If;
    Select regexp_substr(instring,
                         '[^' || defaultchars || ']+',
                         1,
                         p_occurrence)
      Into returnstring
      From dual;
    Return returnstring;
  End f_varcharsplit;
  • 使用指定子串分割字符串,并获取指定序号的匹配项
  -- Author  : 一起种梧桐吧
  -- Created : 2024年9月20日 08:30:25
  -- Purpose : 使用指定字符分割字符串,并返回指定序号的匹配项
  Function f_varcharsplit2(p_instring   Varchar2,
                           p_splitchars Varchar2,
                           p_occurrence Number) Return Varchar2 Is
    instring     Varchar2(2000);
    returnstring Varchar2(2000);
  Begin
    -- 分割字符串不能为空
    If p_splitchars Is Null Then
      Return Null;
    End If;
    -- 匹配项的序号必须>=1
    If p_occurrence <= 0 Then
      Return Null;
    End If;
    -- 当输入字符串的开头以默认分割字符串开始,则对输入字符串进行截取
    If substr(p_instring, 0, length(p_splitchars)) = p_splitchars Then
      instring := substr(p_instring, length(p_splitchars));
    Else
      instring := p_instring;
    End If;
    Select regexp_substr(instring,
                         '[^' || p_splitchars || ']+',
                         1,
                         p_occurrence)
      Into returnstring
      From dual;
    Return returnstring;
  End f_varcharsplit2;
  • 获取使用默认子串分割字符串,获取指定序号的匹配项后的所有字符串
  -- Author  : 一起种梧桐吧
  -- Created : 2024年10月21日 16:53:00
  -- Purpose : 默认使用'*#&!*'分割字符串,并返回指定序号的匹配项后面的子串
  Function f_varcharsplitlaststring(p_instring   Varchar2,
                                    p_occurrence Number) Return Varchar2 Is
    defaultchars Varchar2(20) := '*#&!*';
    instring     Varchar2(2000);
    returnstring Varchar2(2000);
  Begin
    -- 匹配项的序号必须>=1
    If p_occurrence <= 0 Then
      Return Null;
    End If;
    -- 当输入字符串的开头以默认分割字符串开始,则对输入字符串进行截取
    If substr(p_instring, 0, length(defaultchars)) = defaultchars Then
      instring := substr(p_instring, length(defaultchars));
    Else
      instring := p_instring;
    End If;
    Select substr(instring,
                  regexp_instr(instring,
                               '[^' || defaultchars || ']+',
                               1,
                               p_occurrence,
                               1,
                               'c') + length(defaultchars))
      Into returnstring
      From dual;
    Return returnstring;
  End f_varcharsplitlaststring;
  • 获取使用指定子串分割字符串,获取指定序号的匹配项后的所有字符串
  -- Author  : 一起种梧桐吧
  -- Created : 2024年9月20日 08:30:25
  -- Purpose : 使用指定字符分割字符串,并返回指定序号的匹配项后面的子串
  Function f_varcharsplit2laststring(p_instring   Varchar2,
                                     p_splitchars Varchar2,
                                     p_occurrence Number) Return Varchar2 Is
    instring     Varchar2(2000);
    returnstring Varchar2(2000);
  Begin
    -- 分割字符串不能为空
    If p_splitchars Is Null Then
      Return Null;
    End If;
    -- 匹配项的序号必须>=1
    If p_occurrence <= 0 Then
      Return Null;
    End If;
    -- 当输入字符串的开头以默认分割字符串开始,则对输入字符串进行截取
    If substr(p_instring, 0, length(p_splitchars)) = p_splitchars Then
      instring := substr(p_instring, length(p_splitchars));
    Else
      instring := p_instring;
    End If;
    Select substr(instring,
                  regexp_instr(instring,
                               '[^' || p_splitchars || ']+',
                               1,
                               p_occurrence,
                               1,
                               'c') + length(p_splitchars))
      Into returnstring
      From dual;
    Return returnstring;
  End f_varcharsplit2laststring;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值