Split string by space and character as delimiter in Oracle with regexp_substr

前端 未结 5 2016
太阳男子
太阳男子 2020-12-04 00:32

I\'m trying to split a string with regexp_subtr, but i can\'t make it work.

So, first, i have this query

select regexp_substr(\'Helloworld - test!\'          


        
5条回答
  •  自闭症患者
    2020-12-04 01:01

    CREATE OR REPLACE FUNCTION field(i_string            VARCHAR2
                                    ,i_delimiter         VARCHAR2
                                    ,i_occurance         NUMBER
                                    ,i_return_number     NUMBER DEFAULT 0
                                    ,i_replace_delimiter VARCHAR2) RETURN VARCHAR2     IS
      -----------------------------------------------------------------------
      -- Function Name.......: FIELD
      -- Author..............: Dan Simson
      -- Date................: 05/06/2016 
      -- Description.........: This function is similar to the one I used from 
      --                       long ago by Prime Computer.  You can easily
      --                       parse a delimited string.
      -- Example.............: 
      --  String.............: This is a cool function
      --  Delimiter..........: ' '
      --  Occurance..........: 2
      --  Return Number......: 3
      --  Replace Delimiter..: '/'
      --  Return Value.......: is/a/cool
      --------------------------------------------------------------------------    ---                                    
      v_return_string  VARCHAR2(32767);
      n_start          NUMBER := i_occurance;
      v_delimiter      VARCHAR2(1);
      n_return_number  NUMBER := i_return_number;
      n_max_delimiters NUMBER := regexp_count(i_string, i_delimiter);
    BEGIN
      IF i_return_number > n_max_delimiters THEN
        n_return_number := n_max_delimiters + 1;
      END IF;
      FOR a IN 1 .. n_return_number LOOP
        v_return_string := v_return_string || v_delimiter || regexp_substr    (i_string, '[^' || i_delimiter || ']+', 1, n_start);
        n_start         := n_start + 1;
        v_delimiter     := nvl(i_replace_delimiter, i_delimiter);
      END LOOP;
      RETURN(v_return_string);
    END field;
    
    
    SELECT field('This is a cool function',' ',2,3,'/') FROM dual;
    
    SELECT regexp_substr('This is a cool function', '[^ ]+', 1, 1) Word1
          ,regexp_substr('This is a cool function', '[^ ]+', 1, 2) Word2
          ,regexp_substr('This is a cool function', '[^ ]+', 1, 3) Word3
          ,regexp_substr('This is a cool function', '[^ ]+', 1, 4) Word4
          ,regexp_substr('This is a cool function', '[^ ]+', 1, 5) Word5
      FROM dual;
    

提交回复
热议问题