繁体   English   中英

我有两列需要解析的多个值

[英]I have two columns with multiple values that I need to parse out

我有这样的一张桌子:

Make       Model                    Year
----------------------------------------------------    
Toyota     Corolla, Camry, Avalon   2009, 2006, 2011

我希望它是以下内容:

Make       Model      Year
------------------------------    
Toyota     Corolla    2009
Toyota     Camry      2006
Toyota     Avalon     2011

从本质上讲,我希望将两列分开,并按其列出的顺序相互关联。

返回序列的解析函数将在这里有所帮助

Select A.Make
      ,B.*
 From  YourTable A
 Cross Apply (
                Select Model=B1.RetVal
                      ,Year =B2.RetVal
                 From  [dbo].[tvf-Str-Parse](A.Model,',') B1
                 Join  [dbo].[tvf-Str-Parse](A.Year,',')  B2
                   on  B1.RetSeq=B2.RetSeq
             ) B

返回

Make    Model   Year
Toyota  Corolla 2009
Toyota  Camry   2006
Toyota  Avalon  2011

UDF(如果有兴趣)

CREATE FUNCTION [dbo].[tvf-Str-Parse] (@String varchar(max),@Delimiter varchar(10))
Returns Table 
As
Return (  
    Select RetSeq = Row_Number() over (Order By (Select null))
          ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
    From  (Select x = Cast('<x>' + replace((Select replace(@String,@Delimiter,'§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as A 
    Cross Apply x.nodes('x') AS B(i)
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM