T-SQL函数将带有两个分隔符的字符串作为列分隔符分割成表

时间:2015-07-30 11:36:36

标签: sql sql-server tsql

我正在寻找一个t-sql函数来获取类似的字符串:

  

A:B,C:d,E:F

并将其转换为类似

的表格
ID     Value

a      b

c      d

e      f

我在互联网上找到的任何内容都包含单列解析(例如XMLSplit函数变体),但没有一个让我用两个分隔符来描述我的字符串,一个用于列分离&行隔离的另一个。

你能指导我这个问题吗?我有一个非常有限的t-sql知识,不能分叉那些读取函数来获得两列解决方案吗?

2 个答案:

答案 0 :(得分:1)

您可以在网络上找到split()功能。然后,你可以做字符串逻辑:

select left(val, charindex(':', val)) as col1,
       substring(val, charindex(':', val) + 1, len(val)) as col2
from dbo.split(@str, ';') s(val);

答案 1 :(得分:1)

您可以使用自定义SQL拆分功能来分隔数据值列 这是您可以在开发系统上使用的sql split function 它返回一个ID值,有助于将id和value保持在一起

您需要拆分两次,首先使用“,”然后使用“;”进行第二次拆分字符

declare @str nvarchar(100) = 'a:b,c:d,e:f'
select
    id = max(id),
    value = max(value)
from (
select 
    rowid,
    id = case when id = 1 then val else null end,
    value = case when id = 2 then val else null end
from (
select 
    s.id rowid, t.id, t.val
from (
    select * from dbo.Split(@str, ',')
) s
cross apply dbo.Split(s.val, ':') t
) k
) m group by rowid