【问题标题】:MSSQL select substring according to this patternMSSQL 根据此模式选择子字符串
【发布时间】:2014-10-01 17:35:33
【问题描述】:

我不得不向你询问一些与 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

对不起我的英语......

感谢您的帮助...

【问题讨论】:

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


    【解决方案1】:
    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)
    

    【讨论】:

    • 虽然欢迎使用此代码 sn-p,并且可能会提供一些帮助,但它会是 greatly improved if it included an explanation of howwhy 这解决了问题。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      试试这个;)

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

      【讨论】:

      • 子字符串的第三个参数是子字符串的长度,不是结束位置。
      猜你喜欢
      • 1970-01-01
      • 2021-04-01
      • 2021-10-23
      • 2013-06-17
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      相关资源
      最近更新 更多