嗨,我有一个表,其中数据以管道格式分隔的字符串格式存储,现在我需要从字符串中提取数据并创建列。以字符串形式存储的数据示例为:
function PrepareToInstall(var NeedsRestart: Boolean): String;
begin
Log('PrepareToInstall() called');
GetWindowsVersionEx(Version);
if (Version.Major = 10) then begin
NeedsRestart :=True;
end
end;
现在我需要获取如下数据:
有人可以帮助我吗?谢谢
答案 0 :(得分:3)
那里有很多文章说明如何执行字符串拆分,建议阅读它们,例如this。
下面是实现您所要询问的一种方法-
DECLARE @S varchar(max),
@Split char(1),
@X xml
SELECT @S = '<U|''3526''|2|1|EMAIL_ID|kaye.warne@gradusworld.com, melanie.farnan@corptraveller.co.uk>',
@Split = '|'
SELECT @S = REPLACE(REPLACE(@S,'<',''),'>','')
SELECT @X = CONVERT(xml,' <root> <myvalue>' + REPLACE(@S,@Split,'</myvalue> <myvalue>') + '</myvalue> </root> ')
SELECT DISTINCT
T.c.value('(/root/myvalue)[1]','VARCHAR(20)') ,
T.c.value('(/root/myvalue)[2]','VARCHAR(20)'),
T.c.value('(/root/myvalue)[3]','VARCHAR(20)'),
T.c.value('(/root/myvalue)[4]','VARCHAR(20)'),
T.c.value('(/root/myvalue)[5]','VARCHAR(20)'),
T.c.value('(/root/myvalue)[6]','VARCHAR(2000)')
FROM @X.nodes('/root/myvalue') T(c)