SQL-使用“拆分”拆分字符串/&引用;这种情况多次发生
我正在寻找HSQLDB的查询 我有一个字符串,其中包含以“/”分隔的地址信息。现在我必须将这个字符串除以“/”并将各个地址信息插入到单独的列中SQL-使用“拆分”拆分字符串/&引用;这种情况多次发生,sql,string,split,hsqldb,Sql,String,Split,Hsqldb,我正在寻找HSQLDB的查询 我有一个字符串,其中包含以“/”分隔的地址信息。现在我必须将这个字符串除以“/”并将各个地址信息插入到单独的列中 Address = /1234/CLAREVIEW////WILMINGTON/DE/19702 这需要拆分为 StreetNo = Address[1] = 1234 StreetName = Address[2] = CLAREVIEW StreetType = Address[3] = City = Address[6] = WILMINGT
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
我怎样才能做到这一点
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
使用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;
然后
使用REGEXP\u SUBSTRING\u ARRAY函数创建过程以拆分为数组。然后在t(StreetNo,StreetName,StreetType…)中插入值(arr[1],arr[2],arr[3],…)@fredt我从未使用过REGEXP\u子字符串\u数组。我搜索了一下,但找不到任何有用的东西。你能提供一些例子吗?为什么你认为SQL Server解决方案(使用T-SQL)可以在HSQLDB上工作?谢谢。这太完美了。阿尔纳姆·迪恩似乎对我有用。我在标题中使用了[a-zA-Z0-9],有一种方法可以扩展正则表达式以包括特殊字符,而不仅仅是数字和字母
CALL INSERT_USING_REGEXP('/1234/CLAREVIEW////WILMINGTON/DE/19702');