【发布时间】:2018-01-29 12:11:57
【问题描述】:
函数 px_explode 将提供两个参数:
- 分隔符
- 字符串
最终结果将如下所示:
SELECT * FROM dbo.px_explode('xxy', 'alfaxxybetaxxygama')
会回来
但是…… 查询不会完成执行,所以我假设我在这里遇到了一个无限循环,现在假设这个,我的问题可能是。
如何避免我遇到的无限循环以及我错过了什么?
代码:
CREATE FUNCTION dbo.px_explode
(@separator VARCHAR(10), @string VARCHAR(2000))
RETURNS @expl_tbl TABLE
(val VARCHAR(100))
AS
BEGIN
IF (CHARINDEX(@separator, @string) = 0) and (LTRIM(RTRIM(@string)) <> '')
INSERT INTO @expl_tbl VALUES(LTRIM(RTRIM(@string)))
ELSE
BEGIN
WHILE CHARINDEX(@separator, @string) > 0
BEGIN
IF (LTRIM(RTRIM(LEFT(@string, CHARINDEX(@separator, @string) - 1)))
<> '')
INSERT INTO @expl_tbl VALUES(LTRIM(RTRIM(LEFT(@string,
CHARINDEX(@separator, @string) - 1))))
END
IF LTRIM(RTRIM(@string)) <> ''
INSERT INTO @expl_tbl VALUES(LTRIM(RTRIM(@string)))
END
RETURN
END
【问题讨论】:
-
不过,要回答您的问题,您的 while 循环基于
CHARINDEX(@separator, @string) > 0,并且在每次迭代中您都不会更改这些值中的任何一个,因此循环将永远不会退出 - 但如上所述,这是一个真的是低效的功能,所以我不会费心去修复它,
标签: tsql substring sql-function charindex