当前位置:  开发笔记 > 数据库 > 正文

Plsql分割字符串的最佳方法

如何解决《Plsql分割字符串的最佳方法》经验,为你挑选了1个好方法。

从字符串中提取单词的最佳方法是什么?我已经做了一些事情,因为我找到了许多方法,但没有一个看起来"简单".

我们假设有一个名为'change_opening_hours'的程序.此过程具有名为"v_perioden"的时间范围字符串输入.

这个字符串看起来像:

'10:00-12:00'

'10:00-12:00 14:00-16:00'

'10:00-12:00 14:00-16:00 18:00-22:00'

现在我已经自己做了一些事情来从这个输入中抽出每一段时间.

  v_perioden   VARCHAR2(50) := '10:00-12:00 14:00-18:00 22:00-24:00';
  ...
  -- loop though time-periode depeningd
  -- on amount of spaces
  FOR i IN 0..REGEXP_COUNT(v_perioden, ' ') LOOP
    -- first period
    IF i = 0 THEN DBMS_OUTPUT.PUT_LINE(SUBSTR(v_perioden, 0, 11));
    -- second period
    ELSIF i = 1 THEN DBMS_OUTPUT.PUT_LINE(SUBSTR(v_perioden, 13, 11));
    --thirt period
    ELSIF i = 2 THEN DBMS_OUTPUT.PUT_LINE(SUBSTR(v_perioden, 25, 11));
    END IF;
  END LOOP;

输出:

10:00-12:00
14:00-18:00
22:00-24:00

现在这种方式工作正常,但它不是那么有能力.我试图找出如何从空间中的字符串中提取单词,但这并没有成功.



1> Gary_W..:

此方法处理NULL元素(尝试使用此字符串'10:00-12:00 18:00-22:00'进行测试,在不必编辑的情况下处理分隔符出现之间的可变字符数,最重要的是处理列表中可变数量的元素:

SQL> with tbl(v_perioden) as (
      select '10:00-12:00 14:00-16:00 18:00-22:00'  from dual
    )
    select level nbr, regexp_substr(v_perioden, '(.*?)( |$)', 1, level, null, 1) element
    from tbl
    connect by level <= regexp_count(v_perioden, ' ')+1
    order by level;

       NBR ELEMENT
---------- -----------------------------------
         1 10:00-12:00
         2 14:00-16:00
         3 18:00-22:00

SQL>

这就是为什么要确保处理NULL列表元素的原因:将逗号分隔值拆分为Oracle中的列

总是期待意外!

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有