SQL - 使用多次出现的“/”拆分字符串
Posted
技术标签:
【中文标题】SQL - 使用多次出现的“/”拆分字符串【英文标题】:SQL - split a string using "/" that occurs multiple times 【发布时间】:2017-09-05 20:37:41 【问题描述】:我正在寻找 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
我怎样才能做到这一点?
【问题讨论】:
使用 REGEXP_SUBSTRING_ARRAY 函数创建过程以拆分为数组。然后 INSERT INTO t (StreetNo, StreetName, StreetType...) VALUES (arr[1], arr[2], arr[3], ...) @fredt 我从未使用过 REGEXP_SUBSTRING_ARRAY。我搜索但找不到任何有用的东西。请给我一些例子吗 【参考方案1】:使用 REGEXP_SUBSTRING_ARRAY 函数创建过程以拆分为数组。
REGEXP_SUBSTRING_ARRAY('/1234/CLAREVIEW////WILMINGTON/DE/19702', '/\pAlnum*');
返回
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,'/\pAlnum*');
INSERT INTO thetable ((StreetNo, StreetName, StreetType...) VALUES ( arr[1], arr[2], arr[3], ...);
END;
然后
CALL INSERT_USING_REGEXP('/1234/CLAREVIEW////WILMINGTON/DE/19702');
【讨论】:
谢谢。这是完美的。 Alnum dint 似乎对我有用。我用 [a-zA-Z0-9] 代替 有没有办法可以扩展正则表达式以包含特殊字符,而不仅仅是数字和字母【参考方案2】: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
【讨论】:
为什么您认为 SQL Server 解决方案(使用 T-SQL)可以在 HSQLDB 上运行?以上是关于SQL - 使用多次出现的“/”拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章