MSSQL根据此模式选择子字符串

时间:2014-08-08 09:25:22

标签: sql-server sql-server-2012 substring patindex

我不得不问你一些与MSSQL有关的东西。

所以,我有一个名为Command(VARCHAR)的列,它是一个名为TB_Commander的表的一部分。

此列包含例如(行)的结果:

1.Delete o:2312312, c=312321
2.Add o:342342344, c=5

顺便说一句。我想要做的是从这些行中选择仅包含'o:2312312'的子串,对于第2行,只选择'o:342342344'。

我被困在这里:

    select 
    SUBSTRING(Command,PATINDEX('%1%',Command), 
    CHARINDEX(',',Command,PATINDEX('%o=%',Command))-0) as OperationID 
    from TB_Commander 
    where IdRow = 921321

抱歉我的英文......

非常感谢...

3 个答案:

答案 0 :(得分:1)

试试这个;)

select
substring(command, 
    patindex('%o:%', command) - 2, 
    patindex('%, c%', command)) as OperationID 
from TB_Commander 
where IdRow = 921321

答案 1 :(得分:0)

此解决方案仅返回您需要的数据,并考虑用于提取所需数据的模式的帐户长度:

SELECT
    SUBSTRING(command, 
    PATINDEX('%o:%', command) + LEN('o:'), 
    PATINDEX('%, c%', [FiscalizationRequest]) - PATINDEX('%o:%',[FiscalizationRequest]) - LEN('o:')
    ) as OperationID 
FROM TB_Commander;

答案 2 :(得分:0)

declare @i int

declare @str varchar(1000)

set @str='interesting data'

declare @pattern varchar(1000)

set @pattern='eres'

SELECT @i=PATINDEX('%ter%', @str);  

select substring(@str,@i-4,len(@pattern)+4)