代码之家  ›  专栏  ›  技术社区  ›  keanu

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

  •  2
  • keanu  · 技术社区  · 7 年前

    我正在寻找HSQLDB的查询。

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

    这需要拆分为

    StreetNo = Address[1] = 1234
    StreetName = Address[2] = CLAREVIEW
    StreetType = Address[3] = 
    City = Address[6] = WILMINGTON
    StateCd = Address[7] = DE
    ZipCd = Address[8] = 19702
    

    我怎样才能做到这一点?

    2 回复  |  直到 7 年前
        1
  •  3
  •   fredt    7 年前

    使用REGEXP\u SUBSTRING\u 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');
    
        2
  •  -1
  •   James Luxton    7 年前
    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