MattsBits
MattsBits

MattsBits

PLSQL Function To Split String By Token Or Delimiter  

by Matt Hawkins, 23/04/2010
Categories : Oracle

PLSQL doesn't include any functions to split strings by tokens or delimiting characters such as commas or colons.

The function below allows you to split a string separated by a specified character. It returns the chunk that you request.

myStr := SPLIT_STRING_BY_TOKEN('red:blue:green',':',2)


This function call above returns the 2nd chunk in the string which results in 'blue'.


CREATE OR REPLACE FUNCTION SPLIT_STRING_BY_TOKEN(pStr IN VARCHAR2,
                                        pToken IN VARCHAR2,
                                        pChunk IN VARCHAR2 DEFAULT 1) RETURN VARCHAR2 AS 

  -- 23/04/2010 www.mattsbits.co.uk
  -- This function returns a chunk of a string delimited with pToken
  -- pStr - String to search
  -- pToken  - Single delimiting character to split by

  TYPE t_array IS TABLE OF VARCHAR2(200) INDEX BY BINARY_INTEGER; 

  intStart NUMBER;  -- Start of chunk
  intStop  NUMBER;  -- End of chunk
  intChunk NUMBER;  -- Chunk counter

  chunks t_array;   -- Array to hold chunks

BEGIN

   intChunk := 0;
   intStart := 1;
   intStop  := instr(pStr,pToken); 

   -- Continue while there are chunks to find
   WHILE (intStop != 0) LOOP 

     -- Increment chunk counter 
     intChunk := intChunk + 1; 

     -- Get chunk
     chunks(intChunk) := substr(pStr,intStart,intStop-intStart);

     -- Reset positions
     intStart := intStop+1;
     intStop  := instr(pStr,pToken,intStart);      

     -- If at the end of the string get last chunk
     IF intStop=0 THEN
       intChunk := intChunk + 1; 
       chunks(intChunk) := substr(pStr,intStart,length(pStr)-intStart+1);
     END IF;

  END LOOP;
  
  IF pChunk>intChunk OR pChunk<1 THEN
    -- No chunk exists
    RETURN '';
  ELSE
    -- Return requested chunk
    RETURN chunks(pChunk);
  END IF;

END SPLIT_STRING_BY_TOKEN;


This function is useful if you've got a list of parameters in a known order that you need to extract.

It also deals with empty entries. ie where the delimiter appears next to each other.

The delimiting character is always treated as a delimiter to make sure your data doesn't contain it.

Author : Matt Hawkins  Last Edit By : Matt Hawkins
PHP Powered  MySQL Powered  Valid XHTML 1.0  Valid CSS  Firefox - Take Back The Web  EUKHost - Recommended Webhosting Solutions

MattHawkins CMS v3.0 - Copyright 2009-2017