【问题标题】:Split function in SQL Server [duplicate]SQL Server中的拆分功能[重复]
【发布时间】:2017-09-19 03:39:53
【问题描述】:

我有两张桌子:

Tabletemp

Itemcode   Barcode 
---------------------------------------
100001     896633212,586231478
100002     639933212/236232369
100003     930933212 987232369 633214589
100004     940933212 

我想将数据插入另一个表Tablebarcode,如下所示

 ItemCode   Barcode
 ---------------------
 100001     896633212
 100001     586231478
 100002     639933212
 100002     236232369
 100003     930933212 
 100003     987232369 
 100003     633214589
 100004     940933212

【问题讨论】:

标签: sql-server database database-administration


【解决方案1】:

多次交叉应用拆分功能并使用不同的分隔符

select  *
from    Tabletemp t
        cross apply DelimitedSplit8K(t.Barcode, ',') a
        cross apply DelimitedSplit8K(a.Item, '/') b
        cross apply DelimitedSplit8K(b.Item, ' ') c

这里我使用的是 Jeff Moden 的 DelimitedSplit8K http://www.sqlservercentral.com/articles/Tally+Table/72993/

【讨论】:

    【解决方案2】:

    首先,给自己弄一个字符串拆分器,看看这个article by Jeff Moden 它构建的函数允许您传入分隔字符串,并将每个值拆分到自己的行中。所以您只需

    select tt.ItemCode, x.ItemValue as BarCode
    from TableTemp tt
    cross apply SplitString_CRL(BarCode, ' ') 
    

    这会将每个重载的条形码分成一行。

    【讨论】:

    • 感谢回复,但我有/或逗号或空格
    【解决方案3】:

    转换成Xml并Split我们可以得到结果

    SELECT Itemcode, 
           split.a.value('.', 'nvarchar(1000)') AS Barcode 
    FROM   (SELECT Itemcode, 
                   Cast('<S>' 
                        + Replace(Replace(Replace(Barcode, '/', ','), ' ', ','), ',' 
                        , 
                        '</S><S>') 
                        + '</S>' AS XML) AS Barcode 
            FROM   #tabletemp) AS A 
           CROSS apply barcode.nodes('S') AS Split(a) 
    

    结果

     ItemCode   Barcode
     ---------------------
     100001     896633212
     100001     586231478
     100002     639933212
     100002     236232369
     100003     930933212 
     100003     987232369 
     100003     633214589
     100004     940933212
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 2018-09-24
      相关资源
      最近更新 更多