SQL SERVER 2008 - 使用SUBSTRING和CHARINDEX返回部分文本。需要返回所有文本UNTIL特定的char

时间:2015-04-25 23:14:08

标签: sql sql-server substring charindex

我有一个名为'响应'其中包含大量有关某人的数据。

我只希望在特定字符串后返回信息

但是,使用下面的方法我有时(当人们有<100智商)得到|直接来自所需的号码..

我喜欢“PersonIQ =&#39;之后的任何字符”。但只是在管道之前。

我不确定实现这一目标的最佳方法。

查询速度是一个问题,我对嵌套CASE的想法可能不是最佳解决方案。

任何建议表示赞赏。感谢

substring(response,(charindex('PersonIQ=',response)+9),3)

2 个答案:

答案 0 :(得分:0)

假设总是有管道,你可以这样做:

spring-security-web

或者,您可以将字符串转换为xml并直接引用PersonIQ,例如:

substring(stuff(reponse,1,charindex('PersonIQ=',reponse)-1,''),1,charindex('|',stuff(reponse,1,charindex('PersonIQ=',reponse)-1,''))-1)

答案 1 :(得分:0)

这是我的建议:

declare @s varchar(200) = 'aaa=bbb|cc=d|PersonIQ=99|e=f|1=2'
declare @iq varchar(10) = 'PersonIQ='
declare @pipe varchar(1) = '|'

select substring(@s, 
        charindex(@iq, @s) + len(@iq), 
        charindex(@pipe, @s, charindex(@iq, @s)) - (charindex(@iq, @s) + len(@iq)) 
        )

您应该使用公式3的最后一部分来计算@iq和@pipe之间的空间,而不是公式中的charindex(@pipe, @s, charindex(@iq, @s)) - (charindex(@iq, @s) + len(@iq)),它会获得@iq之后的第一个@pipe索引,并且然后逐步构造IQ值的索引。