我正在寻找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
我怎样才能做到这一点?
答案 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