从字符串中提取单词的最佳方法是什么?我已经编造了一些东西,因为我发现了很多方法,但没有一个看起来“简单”。
假设有一个名为“ 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
现在,这种方法可以正常工作,但不是那么有效。我试图找出如何从空格上的字符串中提取单词,但这是行不通的。
您应该结合使用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