【问题标题】:Split values into separate rows将值拆分为单独的行
【发布时间】:2015-02-26 07:56:19
【问题描述】:
WITH Numbers AS (SELECT Table.ProductNumber FROM Table WITH (NOLOCK))

返回 ProductNumber,例如 123,4,5 - 有些是逗号分隔的,所以我想拆分而不是使用 WHERE 对它们进行正确的 SELECT

到目前为止我得到的是:

SELECT @XML = CONVERT(xml,'<root><s>' + REPLACE(Numbers , ',' ,'</s><s>') + '</s></root>')
SELECT [ProductNumber ] = T.c.value('.','varchar(60)') FROM @XML.nodes('/root/s') T(c)

但我不知道如何将选定的 SQL 资源 Numbers 转换为字符串以进行 XML 转换,并且不知道 ProductNumber 在哪一行

【问题讨论】:

  • 所以您的每一行都以逗号分隔格式存储 ProductNumber?
  • 不是每一个。只是其中一些
  • 此表中还有其他列吗?
  • 是的,每个人都有唯一的 ID,我想选择带有 ProductNumber = 'something' 的 ID,可以在逗号分隔的行中

标签: sql sql-server split


【解决方案1】:

您的查询中的问题是您是 assigning,将 xml 转换为 variable,但这里只有最后一行将存储在该 variable 中。

试试这样的。

SELECT Split.a.value('.', 'VARCHAR(100)') splt_num
FROM   (SELECT Cast ('<M>'
                     + Replace(ProductNumber, ',', '</M><M>')
                     + '</M>' AS XML) AS Data
        FROM   yourtable) AS A
       CROSS APPLY Data.nodes ('/M') AS Split(a) 

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 2020-07-07
    • 2012-01-28
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多