首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个分隔字符串拆分为两个列表的SQL。

将两个分隔字符串拆分为两个列表的SQL。
EN

Stack Overflow用户
提问于 2015-08-14 17:45:38
回答 1查看 1.9K关注 0票数 1

我遇到的问题是将两个分隔的字符串分割成两个列表。在使用单个分隔符将字符串转换为表时,我已经找到了大量的资源,但在使用两个分隔符时遇到了困难。

这种情况的用例是用于电子商务过滤存储的过程。客户端可以自己管理过滤器( Id),因此存储的proc需要在动态数量的条件下工作。用户在第一个过滤器下选择2个属性,然后在第二个过滤器下选择3个属性等等。性能是最重要的,但我们将处理少量数据,我发现xml解析是最快的,但我在该领域的技能最多也是有限的。

我一直在看这篇文章,但一直很难理解它:https://www.mssqltips.com/sqlservertip/1771/splitting-delimited-strings-using-xml-in-sql-server/

我想要实现的是返回下表的函数.

代码语言:javascript
复制
Input: 14-11,12,13|15-21,22,23
Output:
Id | Values
14 | 11, 12, 13
15 | 21, 22, 23

我将发布更新,因为我继续沿着这条道路。

更新:

实际上,我在考虑这个问题,我认为更好的解决这个问题的办法可能是……

代码语言:javascript
复制
Id | Values 
14 | 11 
14 | 12 
14 | 13 
15 | 21 
15 | 22
15 | 23 

这将允许基于结果的基于集合的事务,这将加快速度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-14 18:08:44

使用MSSQL的leftcharindexsubstring函数,您可以轻松地做到这一点:

代码语言:javascript
复制
create table test(col1 varchar(50));

insert into test values
('14-11,12,13'),
('15-21,22,23');

select left(col1,charindex('-',col1)-1) as id, 
       substring(col1,charindex('-',col1)+1,len(col1)-charindex('-',col1)) as [values]
   from test;

SQL Fiddle Demo

对于更新的版本,可以使用XML解析字符串并将其转换为如下所示的行:

代码语言:javascript
复制
SELECT A.id
    ,Split.a.value('.', 'VARCHAR(100)') AS [Values]
FROM (
    SELECT left(col1, charindex('-', col1) - 1) AS id
        ,CAST('<M>' + REPLACE(substring(col1, charindex('-', col1) + 1
            , len(col1) - charindex('-', col1)), ',', '</M><M>') + '</M>' AS XML) AS String
    FROM test
    ) AS A
CROSS APPLY String.nodes('/M') AS Split(a);

信贷:@SRIRAM's answer

SQL Fiddle Demo2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32015887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档