一尘不染

plsql分割字符串的最佳方法

sql

从字符串中提取单词的最佳方法是什么?我已经编造了一些东西,因为我发现了很多方法,但没有一个看起来“简单”。

假设有一个名为“ 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

现在,这种方法可以正常工作,但不是那么有效。我试图找出如何从空格上的字符串中提取单词,但这是行不通的。


阅读 222

收藏
2021-05-16

共1个答案

一尘不染

您应该结合使用SUBSTR和INSTR函数

select  substr('A B C',0,instr('A B C',' ')) from dual  -- A
UNION ALL
select substr( 'A B C',instr('A B C',' ') , instr('A B C',' ',1,2)-1  ) from dual --B
UNION ALL
select substr( 'A B C', instr('A B C',' ',1,2) , instr('A B C',' ') ) from dual  -- C

*用您的字符串替换ABC

2021-05-16