【发布时间】:2020-07-19 00:20:42
【问题描述】:
我想创建一个函数,它返回一个表,其中包含从输入字符串中提取的两列。
作为输入,函数得到如下字符串:
'@Name=John;@Secondname=Kowalsky;@Mail=example@mail.com;'
该函数应该从这个字符串创建两列 - x,y。
X 代表@value,Y 代表= 之后的值。
我创建了这个:
Create FUNCTION TwoColumnsFromString (
@ReplaceString varchar(max)
)
Returns @temptable TABLE (x varchar(max), y varchar(max))
AS
BEGIN
DECLARE @value1 varchar(max)
WHILE (LEN(@value1)) > 0
BEGIN
SELECT @value1 = (Select @ReplaceString)
INSERT INTO @temptable (x,y)
VALUES ((SUBSTRING(@ReplaceString, CHARINDEX('@', @ReplaceString), CHARINDEX('=',@ReplaceString) -CHARINDEX('@',@ReplaceString))),
(SUBSTRING(@ReplaceString, CHARINDEX('=', @ReplaceString)+1, CHARINDEX(';',@ReplaceString) -CHARINDEX('=',@ReplaceString)-1)))
SET @value1 = REPLACE(@value1, SUBSTRING(@value1, 1, CHARINDEX(';', @value1)), '')
END
RETURN
END
GO
SELECT *
FROM TwoColumnsFromString('@Name=John;@Secondname=Kowalsky;@Mail=example@mail.com;')
但这会返回一个空表。我在这里做错了什么?
【问题讨论】:
-
WHILE 循环永远不会执行,因为@value1 为空,只是声明了。
-
这有帮助!谢谢!
标签: sql sql-server replace substring charindex