How to split a string value based on a delimiter in DB2

后端 未结 10 1744
失恋的感觉
失恋的感觉 2020-11-27 08:09

How do you split a string value in DB2?

For example, given the value:

CHG-FFH.

I want to split on the dash (-), which would resul

10条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-11-27 08:40

    I know this is old post.. but thought following may help others.

    I used following approach to split the given string.

    SELECT TRIM(ITEM) AS ITEM FROM TABLE(.SF_SPLIT(I_INPUTLIST=>'AA|BB|CC|DD|EE|EE|FF', I_DELIMITER=>'|')) AS T;
    
    SF_SPLIT is the User defined SQL function and below is definition:
    
    CREATE OR REPLACE FUNCTION .SF_SPLIT(
    
        I_INPUTLIST VARCHAR(8000) 
      , I_DELIMITER VARCHAR(3)    
    
    ) 
    RETURNS TABLE (ITEM VARCHAR(8000))
    
    LANGUAGE SQL
    
    RETURN
    
    WITH R1 (ITEM, REMINDER) AS 
    
    (SELECT SUBSTR(I_INPUTLIST, 1, LOCATE(I_DELIMITER, I_INPUTLIST)-1) AS ITEM, 
    
    SUBSTR(I_INPUTLIST, LOCATE(I_DELIMITER, I_INPUTLIST)+1, LENGTH(I_INPUTLIST)) REMINDER
    
    FROM SYSIBM.SYSDUMMY1
    
    UNION ALL
    
    SELECT SUBSTR(REMINDER, 1, LOCATE(I_DELIMITER, REMINDER)-1) AS ITEM, 
    SUBSTR(REMINDER, LOCATE(I_DELIMITER, REMINDER)+1, LENGTH(REMINDER)) REMINDER 
    
    FROM R1 WHERE LOCATE(I_DELIMITER, REMINDER) > 0
    
    UNION ALL
    
    SELECT SUBSTR(REMINDER, LOCATE(I_DELIMITER, REMINDER)+1, LENGTH(REMINDER)) AS ITEM,
    
    '' AS REMINDER FROM R1 WHERE REMINDER <> '' AND LOCATE(I_DELIMITER, REMINDER) = 0
    
    )
    
    SELECT ITEM FROM R1;
    

提交回复
热议问题