SQL - 使用多次出现的“/”拆分字符串

时间:2017-09-05 20:37:42

标签: sql string split hsqldb

我正在寻找HSQLDB的查询。

我有一个字符串,其中包含由“/”分隔的地址信息。现在我必须将此字符串拆分为“/”,并将单个地址信息插入到单独的列中。

    VNAME   HSP    HHA   HB_   HO_  INP 
0   atnpi   TRUE   TRUE        TRUE TRUE
1   atupi   TRUE   TRUE             TRUE
2   carnm                TRUE
3   clmid   TRUE   TRUE  TRUE  TRUE TRUE
4   clseq   TRUE   TRUE        TRUE TRUE

这需要拆分为

Address =  /1234/CLAREVIEW////WILMINGTON/DE/19702

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

使用REGEXP_SUBSTRING_ARRAY函数创建过程以拆分为数组。

 REGEXP_SUBSTRING_ARRAY('/1234/CLAREVIEW////WILMINGTON/DE/19702', '/\p{Alnum}*');

返回

 ARRAY['/1234','/CLAREVIEW','/','/','/','/WILMINGTON','/DE','/19702'] 

所以程序应包含:

 CREATE PROCEDURE INSERT_USING_REGEXP (p1 VARCHAR(500)) 
  BEGIN ATOMIC
   DECLARE arr VARCHAR(200) ARRAY;
   SET arr = REGEXP_SUBSTRING_ARRAY(p1,'/\p{Alnum}*');
   INSERT INTO thetable ((StreetNo, StreetName, StreetType...) VALUES ( arr[1], arr[2], arr[3], ...);
  END;

然后

 CALL INSERT_USING_REGEXP('/1234/CLAREVIEW////WILMINGTON/DE/19702');

答案 1 :(得分:-1)

CREATE TABLE #Results
   (
    Ordinal NUMERIC,
    StringValue VARCHAR(MAX)
   )

DECLARE @String VARCHAR(100),
   @Delimiter VARCHAR(100) 

SET @String = '/1234/CLAREVIEW////WILMINGTON/DE/19702'
SET @Delimiter = '/'

DECLARE @TempString VARCHAR(MAX) = @String,
   @Ordinal INT = 0,
   @CharIndex INT = 0

SET @CharIndex = CHARINDEX(@Delimiter, @TempString)
WHILE @CharIndex != 0
   BEGIN     
      SET @Ordinal += 1       
      INSERT   #Results
      VALUES   (@Ordinal, SUBSTRING(@TempString, 0, @CharIndex))       
      SET @TempString = SUBSTRING(@TempString, @CharIndex + 1, LEN(@TempString) - @CharIndex)     
      SET @CharIndex = CHARINDEX(@Delimiter, @TempString)
   END

IF @TempString != ''
   BEGIN
      SET @Ordinal += 1 
      INSERT   #Results
      VALUES   (@Ordinal, @TempString)
   END

SELECT   *
FROM     #Results

I took this answer from here but it should do the trick