从管道定界字符串中提取数据

时间:2018-07-20 08:37:07

标签: sql-server tsql sql-server-2008-r2

嗨,我有一个表,其中数据以管道格式分隔的字符串格式存储,现在我需要从字符串中提取数据并创建列。以字符串形式存储的数据示例为:

function PrepareToInstall(var NeedsRestart: Boolean): String;
begin
  Log('PrepareToInstall() called');
  GetWindowsVersionEx(Version);
  if (Version.Major = 10) then begin
   NeedsRestart :=True;
  end
end;

现在我需要获取如下数据:

U    '3526'  2   1   EMAIL_ID    kaye.warne@gradusworld.com, melanie.farnan@corptraveller.co.uk

有人可以帮助我吗?谢谢

1 个答案:

答案 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)
相关问题