在SQL中解析多个过滤器

时间:2010-05-03 17:11:36

标签: sql-server string

我在解析存储过程参数时遇到问题:

declare @S varchar(100)
set @S = '4=2,24=1534'

以下是查询:

    select 
        cast(idx as varchar(100)) 'idx'
    ,   value 
    ,   SUBSTRING(value, 1, charindex(value, '=')+1)  'first'
    ,   SUBSTRING(value, charindex(value, '=')+1, LEN(value)-charindex(value, '=')-1) 'second'
    from Common.SplitToTable(@S, ',') -- returns (idx int, value varchar(max))
    where len(value) > 0

但这是我得到的结果:

idx    value       first    second
0      4=2         4        4=
1      24=1534     2        24=153

这就是我的预期:

idx    value       first    second
0      4=2         4        2
1      24=1534     2        1534

帮助?

1 个答案:

答案 0 :(得分:1)

charindex的参数是向后的(你要找的字符串是第一个)并相应地调整长度:

select 
    cast(idx as varchar(100)) 'idx'
    ,   value 
    ,   SUBSTRING(value, 1, charindex('=', value)-1)  'first'
    ,   SUBSTRING(value, charindex('=', value)+1, LEN(value)-charindex('=',value)) 'second'
    from Common.SplitToTable(@S, ',') -- returns (idx int, value varchar(max))
    where len(value) > 0