ent*_*ton 0 sql-server-2008 sql-server substring
这是我之前问题的一部分。
我有以下逻辑从表中的列中拆分字符串值tblProjects
,如下所示:
SELECT @Docs = Documents FROM tblProjects WHERE ID = @ID
SET @Docs = @Docs + '$'
SET @pos = 0
SET @len = 0
WHILE CHARINDEX('$', @Docs, @pos + 1)>0
BEGIN
SET @len = CHARINDEX('$', @Docs, @pos + 1) - @pos
SET @value = SUBSTRING(@Docs, @pos, @len)
IF CHARINDEX('|', @value) >0
BEGIN
SELECT @type = SUBSTRING(@value, 1, CHARINDEX('|', @value) - 1),
@name = SUBSTRING(@value, CHARINDEX('|', @value) + 1, 200)
INSERT INTO tblDocuments VALUES(@ID, @value, @type, @name)
END
SET @pos = CHARINDEX('$', @Docs, @pos + @len) +1
END
Run Code Online (Sandbox Code Playgroud)
示例输入将是
insert into tblProjects(ID, Documents)
values('P_1', 'gdgfg|jkkgk$bkgkkj|kjgkgk$vjffj|Khkgjhg$jkgkvghv|kbkghhkgk');
Run Code Online (Sandbox Code Playgroud)
我需要拆分Documents
字符串并将值插入到单独的表中。由 分隔的值|
应进入同一行的单独列,而特定行的值由 分隔$
。
对于表中的所有行,是否有一种查询方法可以在尽可能短的时间内完成此操作?
您应该使用拆分字符串功能。
select left(S.Item, charindex('|', S.Item) - 1),
stuff(S.Item, 1, charindex('|', S.Item), '')
from dbo.tblProjects as P
cross apply dbo.SplitString(P.Documents, '$') as S;
Run Code Online (Sandbox Code Playgroud)
Aaron Bertrand 在博客中介绍了您在Split strings 中的一些替代方案,即正确的方式——或者下一个最好的方式