当前位置: 首页 > 面试题库 >

使用TSQL将逗号分隔的字符串表行拆分为单独的行

周瀚
2023-03-14
问题内容

说我有一个查询,返回以下内容

ID       SomeValue
1        a,b,c,d
2        e,f,g

我想返回以下内容:

ID       SomeValue
1        a
1        b
1        c
1        d
2        e
2        f
2        g

我已经有一个UDF调用Split,它将接受一个字符串和一个delimter并将其作为带有称为[Value]的单个列的表返回。鉴于此,SQL如何实现这一目标?


问题答案:

另外,您可以像这样使用XML:

DECLARE @yourTable TABLE(ID INT,SomeValue VARCHAR(25));

INSERT INTO @yourTable
VALUES  (1,'a,b,c,d'),
        (2,'e,f,g');

WITH CTE
AS
(
    SELECT  ID,
            [xml_val] = CAST('<t>' + REPLACE(SomeValue,',','</t><t>') + '</t>' AS XML)
    FROM @yourTable
)

SELECT  ID,
        [SomeValue] = col.value('.','VARCHAR(100)')
FROM CTE
CROSS APPLY [xml_val].nodes('/t') CA(col)


 类似资料:
  • 问题内容: 当我有1、2、3等字符串列表时,我想将此列用作一列 是否可以通过sql查询? 例如) <-我知道这不起作用。 问题答案: 使用任意数字的子查询来分割您的字符串。您可以使用‘1,2,3’代替vals。 看到它正常工作

  • 在逗号处划分字符串的最佳方法是什么,这样每个单词都可以成为ArrayList的一个元素? 例如:

  • 问题内容: 我正在编写导出功能,我需要将联系人导出到Excel,并且遇到了技术难题-也许我的SQL技能的差距更接近事实了。;) 这是场景:我在数据库中有一堆联系人。每个联系人可以具有许多不同的角色,例如,一个联系人可以是C#开发人员和DBA,也可以是DBA和IT经理。它们分为三个表,如下所示: 不太难遵循。有一组联系人和一组角色。这些由相应ID上的ContactRole表连接。 导出联系人时,我需

  • 问题内容: 欲分割为4的阵列,以利用 这是我的代码: 但是,结果标记是一个空数组:[],而不是 我想要的4数组。 我已经测试过更改一点: 这次的结果标记为。这与我想要的接近,但是我真的不想在拆分之前添加此“ 1”。 问题基本上是,如果它仅包含空元素,它将返回一个空数组。 您能帮助解决问题吗? 问题答案: 您需要使用带有limit参数的重载方法。 从文档(重点是我的): limit参数控制应用图案的

  • 问题内容: 一些外部数据供应商希望给我一个数据字段-管道分隔的字符串值,我觉得这很难处理。 没有应用程序编程语言的帮助,有没有办法将字符串值转换为行? 但是,存在一个困难,该字段具有未知数量的定界元素。 有问题的数据库引擎是MySQL。 例如: 问题答案: 它可能没有我最初想象的那么困难。 这是一种通用方法: 计算分隔符的出现次数 循环多次,每次获取一个新的定界值并将该值插入第二个表中。

  • 问题内容: 您可以使用RegEx将逗号分隔的字符串解析为MySQL中的临时表吗? 问题答案: 这个问题与Mysql可以拆分列差不多吗? MySQL没有拆分字符串函数,因此您必须解决。使用上面答案页中列出的方法之一分割数据后,您就可以对数据进行任何处理。 您可以遍历该自定义函数,并在返回空值时中断它,您必须播放并学习一些语法(或者至少是我愿意),但是mysql中FOR循环的语法是: http://w